Tôi hiểu cách tạo mảng mặt nạ và tôi muốn sử dụng mặt nạ trong mảng bản ghi để tôi có thể truy cập dữ liệu này bằng cách sử dụng thuộc tính được đặt tên. Các mặt nạ dường như bị "mất" khi tôi tạo một mảng kỷ lục từ một mảng đeo mặt nạ:Làm cách nào để che các phần tử của mảng bản ghi trong 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')])
Khi tôi truy cập vào một kỷ lục dữ liệu không được đeo mặt nạ:
>>> r.date[0]
0
Không giống như trong mảng ban đầu:
>>> data['date'][0]
masked_array(data = --,
mask = True,
fill_value = 1e+20)
fill_value = 1e+20)
Tôi có thể làm gì? Liệu mảng bản ghi không hỗ trợ mặt nạ? Duyệt web Tôi đã thấy một số ví dụ mã có vẻ đề xuất khác, nhưng nó không rõ ràng lắm. Hy vọng tôi có thể nhận được câu trả lời hay ở đây.
Cảm ơn, tôi không biết về numpy.ma.mrecords. –
Tôi không cho rằng có cách nào để che dấu các trường riêng lẻ? Trường hợp sử dụng của tôi là thêm một trường có nguồn gốc mới được gọi là "100 ngày cao" (hoặc một cái gì đó tương tự) vì vậy tôi muốn che dấu trường này cho 100 bản ghi đầu tiên. –
@Nate Reed: Tôi nghĩ điều đó là có thể. Bạn đã thử một cái gì đó như 'data.mask ['price'] [dữ liệu ['ngày'] <...] = True'? – unutbu