파이썬 넘파이 recarray type
파이썬의 numpy 모듈에서 제공하는 자료형인 레코드 배열(recarray)의
선언 방법을 위주로 사용 방법을 간략하게 정리해보도록 하겠습니다.
참고로, 레코드 배열에서는 arr['x'] = [1, 3] 처럼 attributes로 해당되는
부분 배열을 가져오는 기능을 제공합니다.
(이는 마치 판다스에서 열을 추출하는 원리와 비슷합니다.)
해당 글은 아래 링크의 넘파이 공식 문서를 참고하여 작성되었으며,
더 자세한 내용이 궁금하시다면 해당 글을 참고해주세요.
1. np.array로 선언 방법
먼저, 일반적인 넘파이 배열을 선언하는 메소드인 np.array로도 recarray와
유사한 자료형을 쉽게 선언할 수 있습니다.
dtype 인자에 ('조회할 속성 이름', '자료형')을 순서대로 지정해주시면 되며,
자료형은 int, float나 혹은 <i4, <f8 처럼 넘파이 숫자 자료형을 지정할 수도 있습니다.
다음은 x, y, z의 세 가지 attributes를 가지는 recarray를 선언한 예시입니다.
import numpy as np
x = np.array([(1, 2.5, 4), (3, 5.5, 8)], dtype=[('x', 'int'), ('y', 'float'), ('z', '<i4')])
값 조회 및 재할당은 아래와 같이 딕셔너리와 유사하게 진행이 가능합니다.
(값 할당 시 자료형은 dtype에서 선언했던 자료형으로 자동 변환됩니다.)
x['x'] # array([1, 3])
x['y'] # array([2.5, 5.5])
x['z'] # array([4, 8], dtype=int32)
x['z'] = [10, 20]
x['z'] # array([10, 20], dtype=int32)
다만, 이 형태로 선언 시에는 x.x 형태로 값에 접근하는 것은 불가능합니다.
x.x # AttributeError: 'numpy.ndarray' object has no attribute 'x'
여기서, view 메소드로 완전한 recarray 자료형 변환이 가능합니다.
x = x.view(np.recarray)
이제, x['x'], x.x 형태 모두로 값에 접근이 가능합니다.
x.x # array([1, 3])
x['x'] # array([1, 3])
2. np.recarray로 선언 방법
처음부터 np.recarray 메소드를 활용하여 레코드 배열을 바로 선언하는 것도 가능합니다.
위의 예제 x와 같은 형태, 속성 및 자료형의 recarray인 y 선언 예시는 다음과 같습니다.
y = np.recarray((2,),
dtype=[('x', 'int'), ('y', 'float'), ('z', '<i4')])
이렇게 선언한 경우 값은 임의의 값으로 할당되어 있는 상태입니다.
y['x'], y.x 형태 모두로 값에 접근이 가능합니다.
y['x'] # array([57007904, 0])
y['y'] # array([0., 0.])
y['z'] # array([0, 0], dtype=int32)
y.x # array([57007904, 0])
값 수정이 자유롭기에 각 속성에 값을 할당하여 사용해주시면 됩니다.
y['x'] = [1, 3]
y['x'] # array([1, 3])
'Python > Numpy' 카테고리의 다른 글
[Numpy] 넘파이 배열 행/열 추가 방법 정리(끝 위치, 중간 위치) (0) | 2022.12.13 |
---|---|
[Numpy] 파이썬 리스트(배열)에서 0이 아닌 값 위치/개수 찾기 : np.nonzero (0) | 2022.10.10 |
[Numpy] 파이썬 eigenvalue, eigenvector 구하기 : np.linalg.eig (0) | 2022.09.27 |