(1) 빠르고 메모리를 효율적으로 사용하여 벡터의 산술 연산과 브로드캐스팅 연산을 지원하는 다차원 배열 ndarray 데이터 타입을 지원한다.
(2) 반복문을 작성할 필요 없이 전체 데이터 배열에 대해 빠른 연산을 제공하는 다양한 표준 수학 함수를 제공한다.
(3) 배열 데이터를 디스크에 쓰거나 읽을 수 있다. (파일로 저장 가능)
(4) 선형대수, 난수발생기, 푸리에 변환 가능, C/C++, 포트란으로 쓰여진 코드를 통합한다.
import numpy as np
# 아래 A와 B는 결과적으로 같은 ndarray 객체를 생성
A = np.arange(5)
B = np.array([0,1,2,3,4]) # 파이썬 리스트를 numpy ndarray로 변환
# 하지만 C는 문자열 배열을 생성한다.
C = np.array([0,1,2,3,'4'])
# D도 A, B와 같은 결과를 내지만, 가능하면 B를 쓰는 게 좋다.
D = np.ndarray((5,), np.int64, np.array([0,1,2,3,4]))
print(A)
print(type(A))
>>> [0 1 2 3 4]
>>> <class 'numpy.ndarray'>
print(B)
print(type(B))
>>> [0 1 2 3 4]
>>> <class 'numpy.ndarray'>
print(C)
print(type(C))
# 문자열이 하나라도 있으면 자동으로 전부 문자열로 변환
>>> ['0' '1' '2' '3' '4']
>>> <class 'numpy.ndarray'>
print(D)
print(type(D))
>>> [0 1 2 3 4]
>>> <class 'numpy.ndarray'>
파이썬은 배열 원소의 데이터 타입이 모두 동일해야 한다.
ndarray에도 동일한 원칙이 적용된다.
문자열을 숫자로 바꿀 수는 없지만 숫자를 문자열로 바꿀 순 있으므로,
배열 원소의 데이터 타입을 모두 문자열로 변환한다.
ndarray.size: 행렬 내 원소의 개수
ndarray.shape: 행렬의 모양
ndarray.ndim: 행렬의 차수 (axis=축의 개수)
reshape: 행렬의 모양 변환
행렬 모양 변환 시에는 원소의 개수가 맞아야 한다.