Python 如何在Numpy中屏蔽记录数组的元素?

Python 如何在Numpy中屏蔽记录数组的元素?,python,numpy,structured-array,masked-array,Python,Numpy,Structured Array,Masked Array,我了解如何创建屏蔽数组,我希望在记录数组中使用屏蔽,以便可以使用命名属性访问此数据。当我从屏蔽数组创建记录数组时,屏蔽似乎“丢失”: >>> data = np.ma.array(np.ma.zeros(30, dtype=[('date', '|O4'), ('price', '<f8')]),mask=[i<10 for i in range(30)]) >>> data masked_array(data = [(--, --) (--, -

我了解如何创建屏蔽数组,我希望在记录数组中使用屏蔽,以便可以使用命名属性访问此数据。当我从屏蔽数组创建记录数组时,屏蔽似乎“丢失”:

>>> data = np.ma.array(np.ma.zeros(30, dtype=[('date', '|O4'), ('price', '<f8')]),mask=[i<10 for i in range(30)])
>>> data
masked_array(data = [(--, --) (--, --) (--, --) (--, --) (--, --) (--, --) (--, --) (--, --)
(--, --) (--, --) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0)
(0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0)],
         mask = [(True, True) (True, True) (True, True) (True, True) (True, True)
(True, True) (True, True) (True, True) (True, True) (True, True)
(False, False) (False, False) (False, False) (False, False) (False, False)
(False, False) (False, False) (False, False) (False, False) (False, False)
(False, False) (False, False) (False, False) (False, False) (False, False)
(False, False) (False, False) (False, False) (False, False) (False, False)],
   fill_value = ('?', 1e+20),
        dtype = [('date', '|O4'), ('price', '<f8')])

>>> r = data.view(np.recarray)
>>> r
rec.array([(0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0),
           (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0),
           (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0),
           (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0),
           (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0)], 
           dtype=[('date', '|O4'), ('price', '<f8')])
与原始阵列中的不同:

>>> data['date'][0]
masked_array(data = --,
             mask = True,
       fill_value = 1e+20)

       fill_value = 1e+20)

我能做什么?记录数组是否不支持掩蔽?浏览网页时,我看到了一些代码示例,这些示例似乎提出了其他建议,但并不十分清楚。希望我能在这里得到一个好的答案。

除了简短的介绍之外,我还没有找到关于numpy.ma.mrecords.MaskedRecords的很多文档。通过研究numpy附带的单元测试,您可以找到一些关于如何使用它的示例。(例如。
/usr/lib/python2.6/dist-packages/numpy/ma/tests/test\u mrecords.py

将numpy导入为np
将numpy.ma.mrecords导入为mrecords
data=np.ma.array(

np.ma.zeros(30,dtype=[('date','O4'),('price',,谢谢,我不知道numpy.ma.mrecords。我想没有办法屏蔽单个字段?我的用例是添加一个名为“100天高”(或类似的东西)的新派生字段所以我想为前100条记录屏蔽此字段。@内特·里德:我认为这是可能的。您是否尝试过类似于
data.mask['price'][data['date']的方法?是的,这两种方法之一是:data.mask[0]['price']=True或data.mask['price'][0]=True。谢谢!
>>> data['date'][0]
masked_array(data = --,
             mask = True,
       fill_value = 1e+20)

       fill_value = 1e+20)
import numpy as np
import numpy.ma.mrecords as mrecords

data = np.ma.array(
    np.ma.zeros(30, dtype=[('date', '|O4'), ('price', '<f8')]),
    mask=[i<10 for i in range(30)])

r = data.view(mrecords.mrecarray)

print(r.date[0])
# --