[Numpy] 구조체(structured array)
- Python/Numpy
- 2021. 5. 1.
numpy를 이용해 SQL 배열같이 column이 있는 배열로 만들 수 있습니다.
tructured array라고 하는데요. 같이 묶음으로 모아서 끌고 가야할때 간단히 모아서 가져가면 좋은 방식입니다.
ndarray의 특성을 가지고 SQL처럼 쓸수 있는 장점이 있습니다.
그리고 각 column마다 다른 타입을 배정해줄 수 있습니다.
각 column은 (name,type)으로 이루어져 있고 배정후 사용하게 됩니다.
dt = np.dtype([('Name', 'S10'), ('Age', 'i4'),
('Height', 'f'), ('Children/Pets', 'i4', 2)])
s = np.array([('Sims', 45, 1.83, (0, 1)),
('Jane', 55, 1.72, (2, 2))], dtype=dt)
dt로 각 column의 이름과 타입을 정합니다. 그리고 s라는 ndarray를 만듭니다.
s의 원소마다 우리가 정한 타입에 맞춰서 구성을 합니다. 그러면 구조체가 완성된 겁니다.
('Children/Pets','i4',2) 에서 2는 dimension을 의미합니다.
Children과 Pets을 가리키기 위해 2 dimension을 사용하도록 요청했습니다. 3으로 하면 3 dim 이 되는 겁니다.
타입은 다음 표와 같이 약자가 있습니다. S10이면 10바이트 크기의 문자를 의미하고 i4는 int32입니다.
int64를 쓰고 싶다면 'i8' 로 지정합니다.
'?' |
boolean |
'b' |
(signed) byte |
'B' |
unsigned byte |
'i' |
(signed) integer |
'u' |
unsigned integer |
'f' |
floating-point |
'c' |
complex-floating point |
'm' |
timedelta |
'M' |
datetime |
'O' |
(Python) objects |
'S', 'a' |
zero-terminated bytes (not recommended) |
'U' |
Unicode string |
'V' |
raw data (void) |
column을 지정해 값이 나오게 할 수도 있습니다.
s['Name']
이중에 하나만 나오게 하고 싶다면 리스트 인덱싱과 같은 방식으로 합니다.
s['Name'][0]
구조체는 매번 만들면 귀찮습니다. 함수나 클래스로 만들어서 간단하게 불러오는게 좋습니다.
표는 numpy 가이드북(numpy.org/doc/stable/reference/arrays.dtypes.html) 에서 발췌하였습니다.
관련 포스팅
'Python > Numpy' 카테고리의 다른 글
[Numpy]ndarray 저장, 불러오기 (0) | 2021.06.15 |
---|---|
[Numpy]격자 그리드 만들기(meshgrid) (1) | 2021.05.19 |
[Numpy] 조건문 걸어서 값 넣기(np.where) (0) | 2021.04.30 |
[Numpy]행렬곱(@)과 내적(dot) 그리고 별연산(*) (0) | 2021.04.07 |
[Numpy] ndarray에 값 추가하기 (2) | 2021.03.21 |