【发布时间】:2016-04-20 15:15:37
【问题描述】:
可以在多个维度上计算 numpy 数组的平均值,例如。 my_ndarray.mean(axis=(1,2))。
但是,它似乎不适用于 屏蔽数组:
>>> import numpy as np
>>> a = np.random.randint(0, 10, (2, 2, 2))
>>> a
array([[[0, 9],
[2, 5]],
[[8, 6],
[0, 7]]])
>>> a.mean(axis=(1, 2))
array([ 4. , 5.25])
>>> ma = np.ma.array(a, mask=(a < 5))
>>> ma.mean(axis=(1, 2))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/numpy/ma/core.py", line 5066, in mean
cnt = self.count(axis=axis)
File "/usr/lib/python2.7/site-packages/numpy/ma/core.py", line 4280, in count
n1 = np.size(m, axis)
File "/usr/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 2700, in size
return a.shape[axis]
TypeError: tuple indices must be integers, not tuple
如何计算屏蔽数组在多个轴上的平均值,最好与普通数组一样简单?
(我宁愿使用不意味着定义新函数的解决方案,如this answer 中所建议的那样。)
【问题讨论】:
-
你试过
ma.mean(2).mean(1)吗? -
@wflynny :这个答案应该有效。以防万一,他只想计算“未屏蔽值”的平均值。
-
有关未实现元组索引的更多详细信息,请参阅this question。
-
@wflynny:这是我的第一个猜测,但它改变了赋予每个值的权重。与以前的例如。它返回
[7, 7.25]而不是[7, 7]应该的。 (另外,应该是ma.mean(1).mean(1)。)
标签: python numpy masked-array