B.mask
以。。开始:
if self._mask is nomask:
result = super(MaskedArray, self).mean(axis=axis, dtype=dtype)
np.ma.nomask
是False
。
这是您的情况B
:
masked_array(data = [1 1 1],
mask = False,
fill_value = 0)
因为掩码是一个与in 大小A
匹配的数组。data
其中B
,它是一个标量,False
,并将mean
其作为特殊情况处理。
我需要进一步挖掘以了解这意味着什么。
In [127]: np.mean(B)
Out[127]:
masked_array(data = 1.0,
mask = False,
fill_value = 0)
In [141]: super(np.ma.MaskedArray,B).mean()
Out[141]:
masked_array(data = 1.0,
mask = False,
fill_value = 0)
我不确定这是否有帮助;np.ndarray
方法与np
函数和方法之间存在一些循环引用np.ma
,这使得很难准确识别正在使用的代码。它就像使用编译的mean
方法一样,但它如何处理掩码并不明显。
我想知道是否意图是使用
np.mean(B.data) # or
B.data.mean()
并且super
方法 fetch 不是正确的方法。
在任何情况下,相同的数组,但带有向量掩码返回标量。
In [132]: C
Out[132]:
masked_array(data = [1 1 1],
mask = [False False False],
fill_value = 0)
In [133]: C.mean()
Out[133]: 1.0
=====================
在没有快捷方式的情况下尝试此方法nomask
,之后会引发错误
dsum = self.sum(axis=axis, dtype=dtype)
cnt = self.count(axis=axis)
if cnt.shape == () and (cnt == 0):
result = masked
else:
result = dsum * 1. / cnt
self.count
在这种情况下返回一个标量nomask
,但np.int32
在常规掩码中返回一个。所以cnt.shape
窒息。
trace
是唯一尝试此super(MaskedArray...)
“快捷方式”的其他蒙面方法。平均代码显然有些笨拙。
=====================
相关错误问题:https ://github.com/numpy/numpy/issues/5769
据此,去年在这里提出了同样的问题:Testing equivalence of mean of Numpy MaskedArray instances raises attribute error
看起来有很多掩蔽问题,而不仅仅是mean
. 开发大师现在或不久的将来可能会有修复。