编辑1:
到目前为止,这似乎是一个错误,是在版本1.8.1和1.9.2之间添加的。我还没有找到根本原因。在1.8.1中np.ma.MaskedArray.mean()
将返回一个标量。在1.9.2中,它返回一个零维MaskedArray。只有当foo.mask
设置为np.ma.nomask
时,才会出现这种情况。你知道吗
编辑2:
I have submitted this as a bug here.
我试图追踪这个问题,但是在跟踪MaskedArray.mean()
的继承时遇到了困难。具体来说,我对numpy/core中的2711行有困难/从数字.py当用MaskedArray
实例调用时,它似乎回调到MaskedArray.mean()
。你知道吗
原始问题:
我可能在做一些有趣的事情,但我似乎找不到问题所在。当我测试np.ma.MaskedArray
的两个不同实例的平均值的等价性时,会产生一个AttributeError
。你知道吗
创建数组:
In [1]: import numpy as np
In [2]: foo = np.ma.array([1,2,3,4])
In [3]: bar = np.ma.array([1,2,3,4])
In [4]: foo.mean()
Out[4]:
masked_array(data = 2.5,
mask = False,
fill_value = 1e+20)
In [5]: bar.mean()
Out[5]:
masked_array(data = 2.5,
mask = False,
fill_value = 1e+20)
比较数组效果很好:
In [6]: foo == bar
Out[6]:
masked_array(data = [ True True True True],
mask = False,
fill_value = True)
测试平均值的等效性失败:
In [7]: foo.mean() == bar.mean()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-7-3b824b0972e3> in <module>()
----> 1 foo.mean() == bar.mean()
/users/___/.local/lib/python2.7/site-packages/numpy/ma/core.pyc in __eq__(self, other)
3705 mask = np.all([[f[n].all() for n in mask.dtype.names]
3706 for f in mask], axis=axis)
-> 3707 check._mask = mask
3708 return check
3709 #
AttributeError: 'numpy.bool_' object has no attribute '_mask'
In [8]: foo.mean() != bar.mean()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-8-0947fa5da1ed> in <module>()
----> 1 foo.mean() != bar.mean()
/users/___/.local/lib/python2.7/site-packages/numpy/ma/core.pyc in __ne__(self, other)
3738 mask = np.all([[f[n].all() for n in mask.dtype.names]
3739 for f in mask], axis=axis)
-> 3740 check._mask = mask
3741 return check
3742 #
测试较大或较小的平均值效果良好:
AttributeError: 'numpy.bool_' object has no attribute '_mask'
In [9]: foo.mean() >= bar.mean()
Out[9]:
masked_array(data = True,
mask = False,
fill_value = True)
In [10]: foo.mean() <= bar.mean()
Out[10]:
masked_array(data = True,
mask = False,
fill_value = True)
Python版本2.7.2和Numpy版本1.9.2:
In [11]: np.__version__
Out[11]: '1.9.2'
似乎在np.ma.MaskedArray.__ne__()
中,变量check
由一行创建,如下所示:
check = np.ndarray.__eq__(foo.filled(0), bar.filled(0)).view(type(foo))
我希望返回一个新的屏蔽数组。但是,由于np.ndarray.__eq__()
返回np.bool_
的实例。试图对check
创建MaskedArray
视图只会生成另一个np.bool_
实例。由于np.bool_
没有_mask
属性,因此例程尝试分配给check._mask
时发生错误。你知道吗
你知道这是怎么回事吗?是我的错误还是愚蠢?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐