当尺寸相同时,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
我在文档中找不到有关此问题的任何内容。我可以自己计算平均值,但我想为此使用内置函数。
这是一种方法-
# 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]