Table of Contents
목차
- Numpy의 형태를 나누기
- 형태에 따른 상수 연산
- 타일과 반복
- 마스킹 연산(array의 브로드 캐스트)
- 다양한 집계 함수
- 저장, 불러오기
- 특정한 기준에 따라서 정렬
- 자주 사용되는 함수
Numpy의 형태를 나누기
import numpy as np
array = np.arange(8).reshape(2, 4)
left, right = np.split(array, [2], axis=1)
print(left.shape)
print(right.shape)
print(right[1][1])
(2, 2)
(2, 2)
7
-> [2] 는 2열부터 right로 나눔
형태에 따른 상수 연산
기본적인 연산
import numpy as np
array = np.random.randint(1, 10, size=4).reshape(2, 2)
result_array = array * 10
print(result_array)
[[10 30]
[40 80]]
서로 다른 형태
import numpy as np
array1 = np.arange(4).reshape(2, 2)
array2 = np.arange(2)
array3 = array1 + array2
print(array3)
[[0 2]
[2 4]]
import numpy as np
array1 = np.arange(0, 8).reshape(2, 4)
array2 = np.arange(0, 8).reshape(2, 4)
array3 = np.concatenate([array1, array2], axis=0)
array4 = np.arange(0, 4).reshape(4, 1)
print(array3 + array4)
[[ 0 1 2 3]
[ 5 6 7 8]
[ 2 3 4 5]
[ 7 8 9 10]]
타일과 반복
반복
In [51]: arr = np.arange(3)
In [52]: arr.repeat(3)
Out[52]: array([0, 0, 0, 1, 1, 1, 2, 2, 2])
In [53]: arr.repeat([2, 3, 4]) ->반복하고 싶은 횟수 순
Out[53]: array([0, 0, 1, 1, 1, 2, 2, 2, 2])
In [54]: arr = randn(2, 2)
In [56]: arr.repeat(2, axis=0)
Out[56]:
array([[ 0.7157, -0.6387],
[ 0.7157, -0.6387],
[ 0.3626, 0.849 ],
[ 0.3626, 0.849 ]])
마스킹 연산(array의 브로드 캐스트)
2차원
import numpy as np
#Numpy 원소의 값을 조건에 따라 바꿀 때는 다음과 같이 합니다.
#반복문을 이용할 때보다 매우 빠르게 동작합니다.
#대체로 이미지 처리(Image Processing)에서 자주 활용됩니다.
array1 = np.arange(16).reshape(4, 4)
print(array1)
array2 = array1 < 10
print(array2)
array1[array2] = 100
print(array1)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[[ True True True True]
[ True True True True]
[ True True False False]
[False False False False]]
[[100 100 100 100]
[100 100 100 100]
[100 100 10 11]
[ 12 13 14 15]]
다차원
np.newaxis
:차원을 늘려줌
#make it as row vector by inserting an axis along first dimension
In [9]: row_vec = arr[np.newaxis, :]
In [10]: row_vec.shape
Out[10]: (1, 4)
#make it as column vector by inserting an axis along second dimension
In [11]: col_vec = arr[:, np.newaxis]
In [12]: col_vec.shape
Out[12]: (4, 1)
다양한 집계 함수
import numpy as np
array = np.arange(16).reshape(4, 4)
print("최대값:", np.max(array))
print("최소값:", np.min(array))
print("합계:", np.sum(array))
print("평균값:", np.mean(array))
행 or 열단위 더하기
import numpy as np
array = np.arange(16).reshape(4, 4)
print(array)
print("합계:", np.sum(array, axis=0))
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
합계: [24 28 32 36] (행)
저장, 불러오기
단일 객체
import numpy as np
array = np.arange(0, 10)
np.save('saved.npy'(저장 이름), array)
result = np.load('saved.npy')
print(result)
[0 1 2 3 4 5 6 7 8 9]
여러 개의 객체
import numpy as np
array1 = np.arange(0, 10)
array2 = np.arange(10, 20)
np.savez('saved.npz', array1=array1, array2=array2)
data = np.load('saved.npz')
result1 = data['array1']
result2 = data['array2']
print(result1)
print(result2)
[0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]
특정한 기준에 따라서 정렬
import numpy as np
Numpy 원소 오름차순 정렬
array = np.array([5, 9, 10, 3, 1])
array.sort()
print(array)
Numpy 원소 내림차순 정렬
array = np.array([5, 9, 10, 3, 1])
array.sort()
print(array[::-1])
각 열을 기준으로 정렬
array = np.array([[5, 9, 10, 3, 1], [8, 3, 4, 2,5]])
array.sort(axis=0)
print(array)
[ 1 3 5 9 10]
[10 9 5 3 1]
[[ 5 3 4 2 1]
[ 8 9 10 3 5]]
자주 사용되는 함수
import numpy as np
균일한 간격으로 데이터 생성
array = np.linspace(0, 10, 5)
print(array)
난수의 재연(실행마다 결과 동일)
np.random.seed(7)
print(np.random.randint(0, 10, (2, 3)))
Numpy 배열 객체 복사
copy로 복사하면 서로 다른 id를 가지므로 다른 객체를 바꿔도 원래객체는 그대로임.
array1 = np.arange(0, 10)
array2 = array1.copy()
print(array2)
import numpy as np
import cv2
array1 = np.arange(0, 10)
array2 = array1.copy()
print(array1)
array2[0] = 99
print(array1)
print(array2)
(결과)
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[99 1 2 3 4 5 6 7 8 9]
중복된 원소 제거
array = np.array([1, 1, 2, 3, 3, 3, 1])
print(np.unique(array))
[ 0. 2.5 5. 7.5 10. ]
[[4 9 6]
[3 3 7]]
[0 1 2 3 4 5 6 7 8 9]
[1 2 3]