참고 자료
https://docs.scipy.org/doc/numpy/user/basics.rec.html
파이썬 버전 3.7 기준
NumPy 버전 1.16 기준
본 포스팅에서는 NumPy에서의 Structured Array의 Record array를 다루기 위한 유용한 함수(Recarray Helper Function)에 대해 포스팅한다.
Structured array(구조체 배열)의 Record array(레코드 배열)에서의 유용한 함수
입력 변수 | 입력 단위 | 설명 |
base | array | 확장시키기 위한 배열을 입력받는다. |
names | string, sequence | base에 추가할 배열의 필드 이름을 입력하며, 문자열이나 문자열의 시퀀스(리스트 등)를 입력받는다. |
data | array, sequence of array | base에 추가할 배열의 데이터를 입력하기 위해 배열이나 배열의 시퀀스(리스트 등)를 입력받는다. |
dtypes | sequence of datatype | 추가할 배열의 자료형에 대한 시퀀스를 입력받는다. (선택적으로 사용 가능) |
fill_value | float | 데이터가 빈 경우에 fill_value에 입력된 값을 사용하여 채운다. (선택적으로 사용 가능) |
usemask | {True, False} | 마스크 배열을 반환 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
asrecarray | {True, False} | recarray를 반환할 것인지 아닌지 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
입력 변수 | 입력 단위 | 설명 |
base | array | 제거를 수행할 배열을 입력받는다. |
drop_names | string, sequence | base에서 제거할 배열의 필드 이름을 입력하며, 문자열이나 문자열의 시퀀스(리스트 등)를 입력받는다. |
usemask | {True, False} | 마스크 배열을 반환 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
asrecarray | {True, False} | recarray를 반환할 것인지 아닌지 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
입력 변수 | 입력 단위 | 설명 |
a | array-like | 해당 함수의 기능을 수행할 배열을 입력받는다. |
key | string, sequence | 중복여부를 확인 할 필드의 이름을 입력받는다, 만약에 없다면, 레코드에 의해 검색이 수행된다. (선택적으로 사용 가능) |
ignoremask | {True, False} | 마스크 데이터가 제거될 것인지 중복된 것으로 고려될 것인지 결정하는 변수이다. (선택적으로 사용 가능) |
return_index | {True, False} | 중복된 값들의 인덱스에 대한 반환 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
입력 변수 | 입력 단위 | 설명 |
adtype | array-like | 해당 함수의 기능을 수행할 배열을 입력받는다. |
lastname | - | 마지막으로 진행된 필드 이름을 입력받는다. (선택적으로 사용 가능, 재귀중 내부적으로 사용한다.) |
parents | - | 상위 필드의 딕셔너리를 입력받는다. (선택적으로 사용 가능, 재귀중 내부적으로 사용한다.) |
입력 변수 | 입력 단위 | 설명 |
key | {string, sequence} | 비교에 사용된 필드에 해당하는 문자열 또는 문자열 시퀀스를 입력받는다. |
r1, r2 | array | 입력되는 구조체 배열이다. |
jointype | {'inner','outer','leftouter} | - inner일 경우 r1과 r2의 공통되는 요소를 반환한다. (교집합) - outer일 경우 r1와 r2의 공통되는 요소와 그렇지 않은 요소를 반환한다.(합집합) - leftouter일 경우 공통 요소와 r2에 있지 않은 r1의 요소를 반환한다. - 이 변수는 선택적으로 사용 가능한 독립변수이며 기본값은 inner이다. |
r1postfix | string | key에는 없지만 r2필드에 있으면서 r1 필드의 이름에 추가될 문자열을 입력받는다. (선택적으로 사용 가능) |
r2postfix | string | key에는 없지만 r1필드에 있으면서 r2 필드의 이름에 추가될 문자열을 입력받는다. (선택적으로 사용 가능) |
defaults | {dictionary} | 해당 기본값으로 필드 이름을 매핑하는 딕셔너리 입력이다. (선택적으로 사용 가능) |
usemask | {True, False} | 마스크 배열을 반환 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
asrecarray | {True, False} | recarray를 반환할 것인지 아닌지 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
입력 변수 | 입력 단위 | 설명 |
seqarrays | sequence of ndarrays | 배열의 시퀀스를 입력으로 받는다. |
fill_value | {float} | 데이터가 빈 경우에 fill_value에 입력된 값을 사용하여 채운다. (선택적으로 사용 가능) |
flatten | {True, False} | 중첩된 필드를 제거할 것인지 여부를 결정한다. (선택적으로 사용 가능) |
usemask | {True, False} | 마스크 배열을 반환 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
asrecarray | {True, False} | recarray를 반환할 것인지 아닌지 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
입력 변수 | 입력 단위 | 설명 |
base | array | 확장시키기 위한 배열을 입력받는다. |
names | string, sequence | base에 추가할 배열의 필드 이름을 입력하며, 문자열이나 문자열의 시퀀스(리스트 등)를 입력받는다. |
data | array, sequence of array | base에 추가할 배열의 데이터를 입력하기 위해 배열이나 배열의 시퀀스(리스트 등)를 입력받는다. |
dtypes | sequence of datatype | 추가할 배열의 자료형에 대한 시퀀스를 입력받는다. (선택적으로 사용 가능) |
fill_value | float | 데이터가 빈 경우에 fill_value에 입력된 값을 사용하여 채운다. (선택적으로 사용 가능) |
usemask | {True, False} | 마스크 배열을 반환 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
asrecarray | {True, False} | recarray를 반환할 것인지 아닌지 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
입력 변수 | 입력 단위 | 설명 |
base | array | 제거를 수행할 배열을 입력받는다. |
drop_names | string, sequence | base에서 제거할 배열의 필드 이름을 입력하며, 문자열이나 문자열의 시퀀스(리스트 등)를 입력받는다. |
입력 변수 | 입력 단위 | 설명 |
key | {string, sequence} | 비교에 사용된 필드에 해당하는 문자열 또는 문자열 시퀀스를 입력받는다. |
r1, r2 | array | 입력되는 구조체 배열이다. |
jointype | {'inner','outer','leftouter} | - inner일 경우 r1과 r2의 공통되는 요소를 반환한다. (교집합) - outer일 경우 r1와 r2의 공통되는 요소와 그렇지 않은 요소를 반환한다.(합집합) - leftouter일 경우 공통 요소와 r2에 있지 않은 r1의 요소를 반환한다. - 이 변수는 선택적으로 사용 가능한 독립변수이며 기본값은 inner이다. |
r1postfix | string | key에는 없지만 r2필드에 있으면서 r1 필드의 이름에 추가될 문자열을 입력받는다. (선택적으로 사용 가능) |
r2postfix | string | key에는 없지만 r1필드에 있으면서 r2 필드의 이름에 추가될 문자열을 입력받는다. (선택적으로 사용 가능) |
defaults | {dictionary} | 해당 기본값으로 필드 이름을 매핑하는 딕셔너리 입력이다. (선택적으로 사용 가능) |
입력 변수 | 입력 단위 | 설명 |
input | ndarray | 입력되는 배열이다. |
output | ndarray | 출력되는 배열이다. |
사용 예)
# import recfunctions 반드시 해야 함
# 예제용 입력
In[36]: x = np.array([(1,1), (2,2)], dtype=[('a', int), ('b', float)])
In[37]: y = np.zeros((3,), dtype=x.dtype)
# 함수 실행 결과
In[38]:rf.recursive_fill_fields(x,y)
Out[38]: array([(1, 1.), (2, 2.), (0, 0.)], dtype=[('a', '<i4'), ('b', '<f8')])
입력 변수 | 입력 단위 | 설명 |
base | array | 필드가 수정되어야할 배열을 입력받는다. |
namemapper | dictionary | 오래된 필드 이름을 새버전으로 매핑하고자하는 딕셔너리를 입력받는다. |
사용 예)
# import recfunctions 반드시 해야 함
# 예제용 입력
In[33]: x = np.array([(1,(1,[1,1])), (2,(2,[2,2]))], dtype=[('a', int), ('b', [('ba',float), ('bb', (float,2))])])
# 함수 적용 결과
In[34]: rf.rename_fields(x,{'a':'X01', 'b':'X02', 'bb':'bbq'})
Out[34]:
array([(1, (1., [1., 1.])), (2, (2., [2., 2.]))],
dtype=[('X01', '<i4'), ('X02', [('ba', '<f8'), ('bbq', '<f8', (2,))])])
입력 변수 | 입력 단위 | 설명 |
arrays | sequence of input arrays | 배열의 시퀀스를 입력받는다. |
default | dictionary | 해당 기본값으로 필드 이름을 매핑하는 딕셔너리 입력이다. (선택적으로 사용 가능) |
usemask | {True, False} | 마스크 배열을 반환 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
asrecarray | {False, True} | recarray를 반환할 것인지 아닌지 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
autoconvert | {False, True} | 필드 타입을 최대로 자동 캐스팅 할지 여부를 결정하는 변수이다. (선택적으로 사용 가능) |
사용 예)
# import recfunctions 반드시 해야 함
# 하나의 배열만 입력했을 경우
In[42]: x = np.array([1,1,1])
In[43]: rf.stack_arrays(x) is x
Out[43]: True
# 두 배열을 입력했을 경우
In[44]: y = np.array([('a',1), ('b',2)], dtype=[('a', '|S3'), ('b', float)])
In[45]: z = np.array([('a',10, 100), ('b',20,200)], dtype=[('a', '|S3'), ('b', float), ('c',float)])
In[46]: stack_yz = rf.stack_arrays((y,z))
In[47]: stack_yz
Out[47]:
masked_array(data=[(b'a', 1.0, --), (b'b', 2.0, --), (b'a', 10.0, 100.0),
(b'b', 20.0, 200.0)],
mask=[(False, False, True), (False, False, True),
(False, False, False), (False, False, False)],
fill_value=(b'N/A', 1.e+20, 1.e+20),
dtype=[('a', 'S3'), ('b', '<f8'), ('c', '<f8')])
'Python > NumPy' 카테고리의 다른 글
배열(array)의 형상(shape) 정보 확인과 조작(reshape, resize) - NumPy(14) (0) | 2019.03.07 |
---|---|
배열(array)의 출력과 기본연산자(basic operation) - NumPy(13) (0) | 2019.03.03 |
Structured Array(구조체 배열)의 Record array(레코드 배열) - NumPy(11) (0) | 2019.02.25 |
Structured Array(구조체 배열)의 indexing(인덱싱)과 assignment(배정) - NumPy(10) (0) | 2019.02.24 |
Structured Array(구조체 배열)의 개요와 생성 - NumPy(9) (0) | 2019.02.23 |
댓글