一尘不染

numpy.mean在不同的行大小上

python

当尺寸相同时,numpy Mean函数可以很好地工作。

a = np.array([[1, 2], [3, 4]])
a.mean(axis=1)
array([ 1.5,  3.5])

但是如果我用改变行大小来做到这一点就会出现错误

a = np.array([[1, 2], [3, 4, 5]])
a.mean(axis=1)
IndexError: tuple index out of range

我在文档中找不到有关此问题的任何内容。我可以自己计算平均值,但我想为此使用内置函数。


阅读 236

收藏
2021-01-20

共1个答案

一尘不染

这是一种方法-

# Store length of each subarray
lens = np.array(map(len,a))

# Generate IDs based on the lengths
IDs = np.repeat(np.arange(len(lens)),lens)

# Use IDs to do bin-based summing of a elems and divide by subarray lengths
out = np.bincount(IDs,np.concatenate(a))/lens

样品运行-

In [34]: a   # Input array
Out[34]: array([[1, 2], [3, 4, 5]], dtype=object)

In [35]: lens = np.array(map(len,a))
    ...: IDs = np.repeat(np.arange(len(lens)),lens)
    ...: out = np.bincount(IDs,np.concatenate(a))/lens
    ...:

In [36]: out  # Average output
Out[36]: array([ 1.5,  4. ])

使用列表理解的更简单的替代方法

In [38]: [np.mean(i) for i in a]
Out[38]: [1.5, 4.0]
2021-01-20