2011-08-27 5 views
6

마스크 된 배열을 만드는 방법을 이해했으며 명명 된 특성을 사용하여이 데이터에 액세스 할 수 있도록 레코드 배열에서 마스킹을 사용하고 싶습니다. 마스킹 내가 마스크 배열에서 레코드 배열을 만들 때 "손실"될 것 같다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) 

어떻게해야합니까? 레코드 배열이 마스킹을 지원하지 않습니까? 웹에서 찾아보기 나는 다른 방법으로 제안하는 코드 예제를 보았지만 명확하지 않았습니다. 희망은 여기에 좋은 대답을 얻을 수 있습니다.

답변

3

간략한 언급 here을 제외하고는 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]) 
# -- 
+0

감사합니다. numpy.ma.mrecords에 대해 알지 못했습니다. –

+0

개별 필드를 마스크하는 방법이 있다고 생각하지 않습니까? 나의 유스 케이스는 "100-day-high"(또는 비슷한 것)라는 새로운 파생 필드를 추가하는 것이므로 처음 100 개의 레코드에 대해이 필드를 가리고 싶다. –

+0

@Nate Reed : 가능하다고 생각합니다. 'data '[price]] [data ['date '] <...] = True'와 같은 것을 시도 했습니까? – unutbu