如何在Numpy中屏蔽记录数组的元素?
我知道怎么创建一个带掩码的数组,我想在记录数组中使用掩码,这样我就可以通过命名属性来访问这些数据。但是,当我从带掩码的数组创建记录数组时,掩码似乎“消失”了。
>>> 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')])
当我访问记录时,数据并没有被掩码:
>>> r.date[0]
0
而在原始数组中是这样的:
>>> data['date'][0]
masked_array(data = --,
mask = True,
fill_value = 1e+20)
fill_value = 1e+20)
我该怎么办呢?记录数组不支持掩码吗?我在网上看到一些代码示例,似乎暗示可以使用掩码,但并不是很清楚。希望在这里能得到一个好的答案。
1 个回答
4
我没有找到很多关于numpy.ma.mrecords.MaskedRecords的文档,除了在这里有简单提到过。你可以通过查看numpy自带的单元测试来找到一些使用示例。(比如说,/usr/lib/python2.6/dist-packages/numpy/ma/tests/test_mrecords.py
)。
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])
# --