gpt4 book ai didi

python - 从不均匀的 numpy 数组中获取转置和/或从不均匀的 numpy 数组中获取平均值

转载 作者:行者123 更新时间:2023-11-28 22:11:23 28 4
gpt4 key购买 nike

我有一个程序输出 numpy 数组,例如:

[[a1, a2],
[b1],
[c1, c2, c3]]

是否有一种优雅的 python 方式可以将它变成这样?

[[a1, b1, c1],
[a2, c2],
[c3]]

这样做的目的是获取列的总和/平均值,如果缺少某些值,这些列不会提示,所以我很高兴可以直接执行此操作。这里有一个例子供你复制过去:

import numpy
test = numpy.array([
numpy.array([3, 5]),
numpy.array([3.4]),
numpy.array([2.8, 5.3, 7.1])
])

最佳答案

由于您没有矩阵,因此无法从 Numpy 的矢量化功能中获益。相反,您可以使用 itertools.zip_longestfilter 来获得您想要的内容:

In [13]: import numpy as np

In [14]: import numpy
...: test = np.array(
...: [np.array([3 , 5]),
...: np.array([3.4]),
...: np.array([2.8,5.3,7.1])])
...:

In [15]: from itertools import zip_longest

In [16]: [np.fromiter(filter(bool, i), dtype=np.float) for i in zip_longest(*test)]
Out[16]: [array([3. , 3.4, 2.8]), array([5. , 5.3]), array([7.1])]

请注意,使用 bool 作为过滤函数将消除 0 或空字符串等 bool 值为 False 的项目。

如果您不确定您的数组中是否有这样的项目,您可以使用另一个列表推导式或带有 filterlambda 函数。

[np.array([for i in sub if i is not None]) for sub in zip_longest(*test)]

您可能还想看看 zip_longest的大致等效实现,以便(如果可能)在返回该列表之前首先生成所需的结果。

关于python - 从不均匀的 numpy 数组中获取转置和/或从不均匀的 numpy 数组中获取平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55727199/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com