Studio KimHippo :D
[Python / NumPy] 8. NumPy의 구조화된 배열 본문
# -*- coding : utf-8 -*-
import numpy as np
# NOTE : NumPy의 구조화된 배열
name = ['Alice', 'Bob', 'Cathy', 'Doug']
age = [25, 45, 37, 19]
weight = [55.0, 85.5, 68.0, 61.5]
# NOTE : 빈 컨테이너 배열 생성
data = np.zeros(4, dtype = {'names' : ('name', 'age', 'weight'),
'formats' : ('U10', 'i4', 'f8')})
data['name'] = name
data['age'] = age
data['weight'] = weight
data
Out [1] :
array([('Alice', 25, 55. ), ('Bob', 45, 85.5), ('Cathy', 37, 68. ),
('Doug', 19, 61.5)],
dtype=[('name', '<U10'), ('age', '<i4'), ('weight', '<f8')])
# NOTE : 전체 이름 가져오기
print(data['name'])
# NOTE : 데이터의 첫 번째 행 가져오기
print(data[0])
# NOTE : 마지막 행의 이름가져오기
print(data[-1]['name'])
# NOTE : 나이가 30 이하인 이름 가져오기
data[data['age'] < 30]['name']
Out [1] :
['Alice' 'Bob' 'Cathy' 'Doug']
Out [2] :
('Alice', 25, 55.)
Out [3] :
Doug
Out [4] :
array(['Alice', 'Doug'], dtype='<U10')
# NOTE : 고급 복합 타입
# mat, f8, (3, 3) : 3x3 부동 소수점 행렬로 구성됨.
tp = np.dtype([('id', 'i8'), ('mat', 'f8', (3, 3))])
x = np.zeros(1, dtype = tp)
print(x[0], '\n')
print(x['mat'][0])
Out [1] :
(0, [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])
Out [2] :
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
# NOTE : 레코드 배열
# 구조화 된 배열과 거의 동일하지만, 딕셔너리 키 대신 속성으로 필드에 접근할 수 있음.
data_rec = data.view(np.recarray)
# NOTE
# 단점 : 동일한 구문을 사용해도 부가적인 오버헤드가 발생.
%timeit data['age']
%timeit data_rec['age']
%timeit data_rec.age
Out [1] :
193 ns ± 31.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
3.84 µs ± 151 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
5.33 µs ± 200 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
참고
O'REILLY 제이크 밴더플래스 저/ 위키북스 김정인 역 - 파이썬 데이터 사이언스 핸드북
'Python Study > NumPy' 카테고리의 다른 글
[Python / NumPy] 9. NumPy 연습 1 - 미국 대통령 키 데이터 활용 (0) | 2019.07.08 |
---|---|
[Python / NumPy] 부록. NumPy 데이터 타입 (0) | 2019.07.08 |
[Python / NumPy] 7.팬시 인덱싱, NumPy 정렬 (0) | 2019.07.08 |
[Python / NumPy] 6. 브로드 캐스팅 (0) | 2019.07.08 |
[Python / NumPy] 5. NumPy ufunction (0) | 2019.07.08 |
Comments