Numpy는 과학 계산을 위해 반드시 필요한 패키지입니다. 다차원 배열을 위한 기능과 선형 대수 연산, 수학 함수, 유사 난수 생성기를 포함합니다. 핵심 기능은 다차원 배열인 ndarray 클래스로, 이 배열의 모든 원소는 동일한 데이터 타입이어야 합니다.
1. 배열 만들기
numpy 배열은 리스트로 구현합니다.
import numpy as np
a = np.array([1, 2, 3])
b = np.array([[1.5, 2, 3], [4, 5, 6]])
print(a)
print(b)
[1 2 3]
[[1.5 2. 3. ]
[4. 5. 6. ]]
np.zeros([행의 수, 열의 수])
np.zeros([3, 4]) # 영행렬 생성
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
np.ones([행의 수, 열의 수])
np.ones([3, 4]) # 원소가 1인 행렬 생성
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
np.arange()
np.arange(4) # 0 <= x < 4인 정수 x
np.arange(5, 20, 3) # 5이상 20미만의 3씩 증가하는 정수
array([0, 1, 2, 3])
array([ 5, 8, 11, 14, 17])
np.linspace(from, to, num)
np.linspace(0, 2, 9) # 0 이상 2 이하를 9개의 수로 균등하게 분할
array([0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
np.full([행의 수, 열의 수], value)
np.full([2, 2], 7)
array([[7, 7],
[7, 7]])
np.eye(차원의 수) : 항등행렬 생성
np.eye(2)
array([[1., 0.],
[0., 1.]])
2. 배열 탐색
ndarray.shape
b.shape # 배열의 차원
(2, 3)
len(ndarray)
len(b) # 배열의 길이
2
ndarray.ndim
b.ndim # 배열 차원의 수
2
ndarray.size
b.size # 배열 내 원소의 수
6
ndarray.dtype
b.dtype # 원소의 데이터 타입
dtype('float64')
ndarray.astype(another type)
b.astype(int) # 배열의 타입을 다른 종류로 변환
array([[1, 2, 3],
[4, 5, 6]])
3. 배열 연산
더하기
x = np.array([[1, 2], [3, 4]], dtype=np.float64)
y = np.array([[5, 6], [7, 8]], dtype=np.float64)
x + y
np.add(x, y)
array([[ 6., 8.],
[10., 12.]])
빼기
x - y
np.subtract(x, y)
array([[-4., -4.],
[-4., -4.]])
곱하기
※ 동일한 위치의 원소끼리 곱하는 연산으로, 행렬곱과 다릅니다.
x * y
np.multiply(x, y)
array([[ 5., 12.],
[21., 32.]])
나누기
x / y
np.divide(x, y)
array([[0.2 , 0.33333333],
[0.42857143, 0.5 ]])
np.sqrt(ndarray)
np.sqrt(x)
array([[1. , 1.41421356],
[1.73205081, 2. ]])
np.log(ndarray)
np.log(x)
array([[0. , 0.69314718],
[1.09861229, 1.38629436]])
np.exp(ndarray)
np.exp(x)
array([[ 2.71828183, 7.3890561 ],
[20.08553692, 54.59815003]])
np.dot(x, y) : 행렬곱
np.dot(x, y) # 행렬곱
x.dot(y) # 위와 동일
array([[19., 22.],
[43., 50.]])
두 행렬의 원소 비교 : ==
z = np.array([[1, 3], [3, 6]], dtype=np.float64)
x == z
array([[ True, False],
[ True, False]])
np.array_equal(ndarray, ndarray) : 두 행렬이 동일한지 비교하기
np.array_equal(x, z)
False
집계 함수
ndarray.sum()
x.sum()
x.sum(axis=0) # 각 열의 합계
x.sum(axis=1) # 각 행의 합계
10.0
array([4., 6.])
array([3., 7.])
ndarray.min()
x.min()
x.min(axis=0) # 각 열에서 최솟값
x.min(axis=1) # 각 행에서 최솟값
1.0
array([1., 2.])
array([1., 3.])
ndarray.max()
x.max()
x.max(axis=0) # 각 열에서 최댓값
x.max(axis=1) # 각 행에서 최댓값
4.0
array([3., 4.])
array([2., 4.])
ndarray.cumsum() : 누적합 구하기
x.cumsum()
x.cumsum(axis=0)
x.cumsum(axis=1)
array([ 1., 3., 6., 10.])
array([[1., 2.],
[4., 6.]])
array([[1., 3.],
[3., 7.]])
np.mean(ndarray), np.median(ndarray), np.var(ndarray), np.std(ndarray)
: 평균, 중위수(중앙값), 분산, 표준편차
np.mean(x)
np.median(x)
np.var(x)
np.std(x)
2.5
2.5
1.25
1.118033988749895
4. 부분 집합, 슬라이싱, 인덱싱
subsetting
a
b
array([1, 2, 3])
array([[1.5, 2. , 3. ],
[4. , 5. , 6. ]])
a[2]
b[1, 2] # b[1][2]과 동일
3
6.0
slicing
a[0:2] # 0, 1번째 원소
b[0:2, 1] # 0, 1번째 행과 1열에 해당하는 원소
b[:1] # 0번째 행, b[0:1, :]과 동일
b[:, :2] # 0, 1번째 열
array([1, 2])
array([2., 5.])
array([[1.5, 2. , 3. ]])
array([[1.5, 2. ],
[4. , 5. ]])
boolean indexing
a[a < 3]
array([1, 2])
5. 행렬 조작하기
np.transpose(ndarray), ndarray.T : 전치행렬
np.transpose(b) # 전치행렬
b.T
array([[1.5, 4. ],
[2. , 5. ],
[3. , 6. ]])
ndarray.ravel() : 원소를 1차원 배열로 나열
b.ravel() # flatten the array
array([1.5, 2. , 3. , 4. , 5. , 6. ])
ndarray.reshape(행의 수, 열의 수) : 행렬의 차원을 변환
b.reshape(3, 2)
array([[1.5, 2. ],
[3. , 4. ],
[5. , 6. ]])
np.vstack((ndarray, ndarray)) = np.r_[ndarray, ndarray] : 행결합
np.vstack((x, y))
np.r_[x, y]
array([[1., 2.],
[3., 4.],
[5., 6.],
[7., 8.]])
np.hstack((ndarray, ndarray)) = np.c_[ndarray, ndarray] : 열결합
np.hstack((x, y))
np.c_[x, y]
array([[1., 2., 5., 6.],
[3., 4., 7., 8.]])
참고자료
http://cs231n.github.io/python-numpy-tutorial/#numpy
https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Numpy_Python_Cheat_Sheet.pdf
'繩鋸木斷水滴石穿 > Python' 카테고리의 다른 글
Pandas 기초 - 데이터 프레임 개조하기(칼럼명 변경, 정렬, 결합) (0) | 2020.04.14 |
---|---|
Pandas 기초 - 데이터 만들기부터 조회까지 (0) | 2020.04.10 |
[자료구조] 스택, 큐, 덱 (0) | 2020.02.23 |
[자료구조] 해시, Dictionary (0) | 2020.02.21 |
[자료구조] 힙(heap) (0) | 2020.02.16 |