728x90
배열 생성
np.array() 는 시퀀스 자료형을 받아 numpy 배열을 생성합니다.
>>> a = [1,2,3,4,5]
>>> np.array(a)
array([1, 2, 3, 4, 5])
>>>
>>> a = [[1,2,3],[10,11,12]]
>>> np.array(a)
array([[ 1, 2, 3],
[10, 11, 12]])
>>> r = range(10)
>>> type(r)
<class 'range'>
>>> a = np.array(r)
>>> a.shape
(10,)
>>> a.size
10
arange() 는 range() 와 유사하며 해당 범위의 요소들을 가지는 배열을 생성합니다.
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
>>> np.arange(1,10,2)
array([1, 3, 5, 7, 9])
>>>
>>> range(10)
range(0, 10)
>>> range(1, 10, 2)
range(1, 10, 2)
zeros() 는 0으로 채운 배열을 생성합니다.
>>> np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
>>> np.zeros((100,100))
array([[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
...,
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.]])
ones() 는 1로 채운 배열을 생성합니다.
>>> np.ones(5)
array([1., 1., 1., 1., 1.])
>>> np.ones((5,5))
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
>>> np.ones((3,3), dtype=np.float32)
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=float32)
empty() 는 메모리에 있는 값으로 배열을 생성합니다.
배열의 크기가 크면 초기화하는데 시간이 걸리므로, 단축할때 사용합니다.
>>> np.empty((6,6))
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])
zeros_like() ones_like() empty_like() 는 기존의 배열과 동일한 shape의 배열을 생성합니다.
>>> a = [[1,2,3], [10,11,12]]
>>> a = np.array(a)
>>> a
array([[ 1, 2, 3],
[10, 11, 12]])
>>> np.zeros_like(a)
array([[0, 0, 0],
[0, 0, 0]])
>>> np.ones_like(a)
array([[1, 1, 1],
[1, 1, 1]])
>>> np.empty_like(a)
array([[0, 0, 0],
[0, 0, 0]])
full() 은 배열에 지정한 값으로 초기화한 배열을 생성합니다.
>>> np.full((10,10), 255)
array([[255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255]])
>>> np.full((400, 200, 3), (255, 255, 255), dtype=np.uint8)
array([[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
...,
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]]], dtype=uint8)
eye() 는 대각선으로 1인 배열을 생성합니다.
>>> np.eye((5))
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
shape, size (attribute)
>>> import numpy as np
>>> a = np.array([[1,2,4,7], [9,88,6,45], [9,76,3,4]])
>>> a
array([[ 1, 2, 4, 7],
[ 9, 88, 6, 45],
[ 9, 76, 3, 4]])
>>> a.shape
(3, 4)
>>> a.size
12
T (attribute)
행과 열을 바꾼 배열을 얻을 수 있습니다.
>>> a = np.arange(12)
>>> ra = a.reshape(3,4)
>>>
>>> ra
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>>
>>> ra.T
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
사칙연산
>>> import numpy as np
>>> a = np.array([[5,6,7], [11,12,13], [14,15,16]])
>>> b = np.array([[25,26,27], [15,17,18], [4,5,6]])
>>>
>>> a+b
array([[30, 32, 34],
[26, 29, 31],
[18, 20, 22]])
>>> b-a
array([[ 20, 20, 20],
[ 4, 5, 5],
[-10, -10, -10]])
>>> a*b
array([[125, 156, 189],
[165, 204, 234],
[ 56, 75, 96]])
>>> b/a
array([[5. , 4.33333333, 3.85714286],
[1.36363636, 1.41666667, 1.38461538],
[0.28571429, 0.33333333, 0.375 ]])
브로드캐스팅
브로드캐스팅은 shape가 다른 배열간 연산을 자동으로 지원하는 기능입니다.
>>> a = np.arange(9)
>>> ra = np.reshape(3,3)
>>> ra = a.reshape(3,3)
>>> ra
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> ra + 3
array([[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>>
>>> ra - 3
array([[-3, -2, -1],
[ 0, 1, 2],
[ 3, 4, 5]])
>>> ra * 2
array([[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16]])
>>>
>>> ra / 1.5
array([[0. , 0.66666667, 1.33333333],
[2. , 2.66666667, 3.33333333],
[4. , 4.66666667, 5.33333333]])
np.sum()
원소들의 합 (axis=0 같은 열 , axis=1 같은 행)
>>> a = np.array([[1,4,7,8],[3,5,5,6]])
>>> np.sum(a)
39
>>> np.sum(a, axis=0)
array([ 4, 9, 12, 14])
>>> np.sum(a, axis=1)
array([20, 19])
np.diff()
배열 근접 원소간의 차 (axis=0 같은 열 , axis=1 같은 행)
>>> a = np.array([[1,4,7,8],[3,5,5,6]])
>>> np.diff(a)
array([[3, 3, 1],
[2, 0, 1]])
>>> np.diff(a, axis=0)
array([[ 2, 1, -2, -2]])
>>> np.diff(a, axis=1)
array([[3, 3, 1],
[2, 0, 1]])
>>> a = np.array([[1,4,7,8],[3,5,5,6],[1,1,1,1]])
>>> a
array([[1, 4, 7, 8],
[3, 5, 5, 6],
[1, 1, 1, 1]])
>>> np.diff(a, axis=0)
array([[ 2, 1, -2, -2],
[-2, -4, -4, -5]])
>>> np.diff(a, axis=1)
array([[3, 3, 1],
[2, 0, 1],
[0, 0, 0]])
np.argmax() np.argmin()
argmax() 은 배열에서 최대값의 인덱스를 구합니다. (axis=0 같은 열 , axis=1 같은 행)
flatten() 은 다차원 배열을 1차원으로 구합니다.
>>> a
array([[ 1, 2, 4, 7],
[ 9, 88, 6, 45],
[ 9, 76, 3, 4]])
>>> np.argmax(a)
5
>>> a.flatten()
array([ 1, 2, 4, 7, 9, 88, 6, 45, 9, 76, 3, 4])
>>> np.argmax(a, axis=0)
array([1, 1, 1, 1], dtype=int64)
>>> np.argmax(a, axis=1)
array([3, 1, 1], dtype=int64)
argmin() 은 배열에서 최소값의 인덱스를 구합니다. (axis=0 같은 열, axis=1 같은 행)
>>> a
array([[ 1, 2, 4, 7],
[ 9, 88, 6, 45],
[ 9, 76, 3, 4]])
>>> np.argmin(a)
0
>>> a.flatten()
array([ 1, 2, 4, 7, 9, 88, 6, 45, 9, 76, 3, 4])
>>> np.argmin(a, axis=0)
array([0, 0, 2, 2], dtype=int64)
>>> np.argmin(a, axis=1)
array([0, 2, 2], dtype=int64)
np.reshape()
배열의 shape 를 변경합니다.
>>> import numpy as np
>>> a = np.arange(80)
>>> a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79])
>>> a.reshape(8, 10)
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79]])
>>> a.reshape(5, 16)
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47],
[48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63],
[64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79]])
'OpenCV' 카테고리의 다른 글
파이썬 OpenCV 기하학적 변환 알아보기 -3 : Affine / Perspective Transformation (0) | 2020.07.25 |
---|---|
파이썬 OpenCV 이미지에 글자 출력하기 : 한글 출력 (PIL) (0) | 2020.07.24 |
파이썬 OpenCV 기하학적 변환 알아보기 -2 : 이미지 피라미드 만들기 (0) | 2020.07.24 |
파이썬 OpenCV 기하학적 변환 알아보기 -1 : 확대축소 / 대칭 / 이동 / 회전 (0) | 2020.07.24 |
파이썬 OpenCV 이미지 필터링 알아보기 : blur, GaussianBlur, medianBlur, bilateralFilter (1) | 2020.07.14 |