2014-07-21 1 views
3

열을 numpy 레코드에 추가하려고합니다.python : numpy에 레코드 배열에 열을 추가하는 방법

import numpy 
import numpy.lib.recfunctions 
data=[[20140101,'a'],[20140102,'b'],[20140103,'c']] 
data_array=numpy.array(data) 
data_dtype=[('date',int),('type','|S1')] 
data_rec=numpy.core.records.array(list(tuple(data_array.transpose())), dtype=data_dtype) 
data_rec.date 
data_rec.type 

#Here, i will just try to make another field called copy_date that is a copy of the date , just as an example 

y=numpy.lib.recfunctions.append_fields(data_rec,'copy_date',data_rec.date,dtypes=data_rec.date.dtype,usemask=False) 

지금

>>> type(y) 
<type 'numpy.ndarray'> 
>>> y.date 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'numpy.ndarray' object has no attribute 'date' 
>>> y.copy_date 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'numpy.ndarray' object has no attribute 'copy_date' 

y는 더 이상 난을 잃은 것 같다

>>> type(data_rec) 
<class 'numpy.core.records.recarray'> 

같은 기록의 유형입니다 출력에서 ​​볼 :

내 코드입니다 속성에 의해 필드를 호출하는 기록 능력. 레코드에 열을 올바르게 추가하고 필드를 호출 할 수 있습니까?

또한 누군가 위의 코드에서 usemask 옵션이하는 일을 말할 수 있다면 기쁠 것입니다.

감사

답변

1

당신은 다시 numpy.lib.recfunctions.append_fields 밖으로 recarray를 얻을 수 asrecarray=True를 전달할 수 있습니다.

예컨대 :

>>> y = numpy.lib.recfunctions.append_fields(data_rec, 'copy_date', data_rec.date, dtypes=data_rec.date.dtype, usemask=False, asrecarray=True) 
>>> y.date 
array([2, 2, 2]) 
>>> y 
rec.array([(2, 'a', 2), (2, 'b', 2), (2, 'c', 2)], 
     dtype=[('date', '<i8'), ('type', '|S1'), ('copy_date', '<i8')]) 
>>> y.copy_date 
array([2, 2, 2]) 

는 NumPy와에서 테스트 1.6.1

관련 문제