对于ma.mean
文档中给出的示例,两者都返回标量
In [1217]: b = np.ma.array([1,2,3], mask=[False, False, True])
In [1218]: b.mean()
Out[1218]: 1.5
In [1219]: b.sum()
Out[1219]: 3
您的情况不同,因为掩码是标量False
,而不是数组:
In [1220]: a=np.ma.array([1,2,3])
In [1221]: a
Out[1221]:
masked_array(data = [1 2 3],
mask = False,
fill_value = 999999)
In [1222]: a.mean()
Out[1222]:
masked_array(data = 2.0,
mask = False,
fill_value = 999999)
In [1223]: a.sum()
Out[1223]: 6
它真的不应该有所作为。我隐约记得看到过关于这个的讨论。我不记得它是在另一个 SO 中,还是在错误问题中。它也可能已修复。我们必须做一些搜索。我的 numpy 版本是 '1.11.0'
问题是 masked 开头的一行mean
:
if self._mask is nomask:
result = super(MaskedArray, self).mean(axis=axis, dtype=dtype)
nomask
是标量False
;因此,在您的a
情况下,它只是尝试执行常规的 numpy 均值,而不对该掩码执行任何特殊操作。但这会尝试返回与输入相同的子类的结果。
将掩码更改a
为数组将“纠正”问题。
In [1247]: a.mask=[False,False,False]
===============
好的,副本隐藏在侧边栏中一目了然
numpy.ma(屏蔽)数组均值方法的返回类型不一致
去年七月我发现了一个错误问题,但没有补丁。