[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

    ....