[Numpy] 구조체(structured array)

반응형
반응형

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] - ndarray 인덱싱,슬라이싱

[Python/Numpy] - [Numpy] ndarray에 값 추가하기

Designed by JB FACTORY