[Python.NumPy] ndarray 이해하기
2020. 11. 30. 19:00ㆍPython과 머신러닝/NumPy 데이터 분석
0. 요약
- 이번에는 ndarray란 무엇이고, 왜 필요한지 배워보려고 한다.
- ndarray를 어떻게 만들 수 있는지 배워보고,
- ndarray의 property는 어떤 것들이 있고, 어떻게 활용되는지 간단한 예제들을 통해서 배워보자.
1. ndarray 란
- NumPy의 N차원 배열 객체이다.
- Python의 list와 가장 큰 차이점은, 하나의 데이터 타입만 넣을 수 있다는 점이다.
(Python List는 Dynamic typing을 지원하지만, ndarray는 지원하지 않는다) - C로 프로그래밍을 한 사람이라면, C의 Array와 동일하다고 이해하면 가장 쉽다.
2. int 타입의 ndarray 생성하기
# a의 list를 int 타입의 ndarray로 생성하여 a_ndarray 변수에 담는다.
a = [1, 2, 3, 4, 5]
a_ndarray = np.array(a, int)
- np.array 함수는 기존의 리스트 형태의 데이터와 데이터 타입을 입력받아 ndarray 형태로 변환해주는 함수이다.
3. String 타입의 자동 형 변환
# b[3]을 Float type으로 입력해도, ndarray는 하나의 타입만 가질 수 있다.
b = [1, 4, 5, '8']
b_ndarray = np.array(b, float)
print(b_ndarray) # 출력을 해서 확인할 수도 있고
type(b_ndarray[3]) # 직접 타입을 확인해도, float로 잘 변환된 것을 확인할 수 있다.
- 위에서 다뤘듯이 python list는 Dynamic typing이 가능하여 여러 데이터 타입이 존재할 수 있지만,
ndarray는 하나의 타입만 존재할 수 있다. - 그래서 List에 여러 데이터 타입이 존재하더라도 ndarray는 알아서 하나의 타입으로 형 변환을 수행한다.
- 위와 같이 string으로 입력하여도, 요청한 float형태로 자동 형 변환을 수행한다.
- print와 type 함수를 통해 원하는 type으로 잘 형 변환이 되었는지 확인할 수 있다.
4. shape와 dtype property 사용하는 방법
c = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
c_ndarray = np.array(c, int)
c_ndarray.shape # (3,3)의 크기를 반환
c_ndarray.dtype # 해당 ndarray의 타입(int)을 반환
- ndarray.shape은 해당 ndarray의 크기를 반환한다.
- ndarray.dtype은 해당 ndarray의 데이터 타입을 반환한다.
5. 3차원 배열의 shape, dtype, ndim, size property 사용하는 방법
d = [[[1, 2, 5, 8], [1, 2, 5, 8], [1, 2, 5, 8]],
[[1, 2, 5, 8], [1, 2, 5, 8], [1, 2, 5, 8]],
[[1, 2, 5, 8], [1, 2, 5, 8], [1, 2, 5, 8]],
[[1, 2, 5, 8], [1, 2, 5, 8], [1, 2, 5, 8]]] # 4x3x4 3차원 배열 선언
d_ndarray = np.array(d, int)
print(d_ndarray.shape) # 3rd order tensor
print(d_ndarray.ndim) # number of dimensions
print(d_ndarray.size) # 48 == 4x3x4
d_ndarray = np.array(d, dtype=np.int8) # 기본은 int32인데, 메모리 낭비가 커서 int8로 사용가능
print(d_ndarray.dtype) # int8출력
- 위와 같이 4x3x4의 3차원 배열을 선언했을 때에도, shape/dtype은 동일하게 동작한다.
- .shape 은 4x3x4를 반환한다.
- .ndim 은 3(3차원의 의미)을 반환한다.
- .size 는 배열의 크기인 48을 반환한다.
- 위와 같은 예제도 데이터가 많아서 복잡한데, 실제 데이터 분석을 위해 사용되는 데이터는 훨씬 방대하다.
- 그렇기 때문에 데이터의 상/하한 값을 안다면, 그에 맞춰 dtype을 np.int8과 같이 줄여서 메모리 낭비를 줄일 수 있다.
6. nbytes로 데이터의 Byte 크기 추출하기
# 소수점까지 있어야 정확한 Y값 예측이 가능해져서 대부분의 경우 float를 사용함
d_ndarray = np.array(d, dtype=np.float32)
print(d_ndarray.nbytes) # byte size를 출력함. 48개 x 4B == 192B 출력
- Machine Learning을 하며 Y값을 잘 예측하기 위해서는 float를 사용하여 소수점까지 정확하게 계산할 필요가 있다.
- 그래서 주로 float를 사용할 것이고, 이런 데이터의 Byte 단위 크기를 알고 싶다면 .nbytes를 사용하면 된다.
7. 마무리
- ndarray는 NumPy에서 N차원 배열을 사용할 때 사용되는 기본이다.
- 즉, 데이터 분석을 하기 위해서는 ndarray를 늘 사용한다고 이해하면 좋다.
- np.array 함수를 통해서 ndarray로 변환하고, 이때 기본 list 데이터와 원하는 데이터 타입을 지정할 수 있다.
- shape/dtype/ndim/size/nbytes 등의 property를 사용하여 데이터에 대한 정보를 얻을 수 있다.
관련 글
2020/11/30 - [Python과 머신러닝/Python 데이터 수집] - ndarray.reshape - 크기 변환하기
2020/11/30 - [Python과 머신러닝/Python 데이터 수집] - NumPy의 ndarray indexing과 slicing
'Python과 머신러닝 > NumPy 데이터 분석' 카테고리의 다른 글
[Python.NumPy] arange/zeros/empty 함수의 차이 - Creation Function I (0) | 2020.12.04 |
---|---|
[Python.NumPy] ndarray indexing과 slicing (0) | 2020.11.30 |
[Python.NumPy] ndarray.reshape - 크기 변환하기 (0) | 2020.11.30 |
[Python.NumPy] Y값 모델링 및 모델 평가 방법론 (0) | 2020.11.30 |
[Python.NumPy] 벡터/행렬 선언하기 및 벡터곱 연산하기 (0) | 2020.11.30 |