티스토리 뷰
ndarray의 사칙연산, 행렬곱, Broadcasting
- 사칙연산 : +, -, *, /
- 행렬곱 : dot product
- Broadcasting은 사칙연산에서만 일어나고, dot product에서는 일어나지 않는다!
1. 행렬 덧셈
- python의 list에서, + 연산자는 concatenation!!
- ndarray에서 + 연산자는 vector, matrix 연산
- ndarray의 사칙연산의 기본 전제는 shape이 같아야 연산이 성립
import numpy as np
arr1 = np.array([[1, 2, 3], [4, 5, 6]]) # 2 x 3 ndarray
arr2 = np.array([[7, 8, 9], [10, 11, 12]]) # 2 x 3 ndarray
print(arr1)
print(arr2)
print(arr1 + arr2) # ndarray의 기본 연산 방식
행렬 덧셈의 Broadcasting
# arr1 = [[1 2 3]
# [4 5 6]]
arr2 = 3 # scalar는 값을 칭한다.
# shape이 안맞는 경우, ndarray가 broadcasting을 진행
print(arr1 + arr2) # [[4 5 6]
# [7 8 9]]
arr2 = np.array([1, 2, 3]) # broadcasting
print(arr1 + arr2) # [[2 4 6]
# [5 7 9]]
# arr2 = np.array([1, 2]) --broadcasting X---> [1, 2, 1, 2]
2. 행렬 곱 연산
두 행렬간의 행렬곱은
np.dot()
,np.matmul()
로 수행이 가능하다.
np.dot(A, B)
np.dot(A, B)
에서 A 행렬의 열 vecotr와, B 행렬의 행 vecotr의 size가 같아야 한다.- 만약 크기가 다르다면,
reshape()
이나resize()
.. 등으로 크기를 맞춘 후 연산을 수행해야 한다.
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8],[9, 10], [11, 12]])
print(arr1.shape) # (2, 3)
print(arr2.shape) # (3, 2)
print(np.dot(arr1, arr2)) # [[ 58 64]
# [139 154]]
- 왜 이런 행렬곱 연산을 알아야 하나요?
- 만약 행렬곱 연산이 없으면 matrix 연산은 같은 크기로만 연산을 수행해야 한다.
- 행렬곱 조건만 만족시키면 다양한 크기의 행렬을 우리가 연속적으로 이용해서 특정 작업을 수행할 수 있다
- 머신러닝, 이미지처리 쪽에서 사용된다.
- 예) 입력 : 32 x 32 matrix (이미지파일)
- 출력 : 32 x 10 matrix (다양한 처리가 적용된 이미지)
- 행렬곱 : (32 x 32) dot (32 x 128) dot (128 x 64) dot (64 x 10)
- => 32 x 10
ndarray의 비교연산
사칙연산과 마찬가지로 비교연산도 같은 index끼리 수행된다.
np.random.seed(0)
arr1 = np.random.randint(0, 10, (2, 3))
arr2 = np.random.randint(0, 10, (2, 3))
print(arr1)
print(arr2)
print(arr1 == arr2) # Boolean Mask 출력
# [[False False False]
# [False True False]]
array_equal()
2개의 ndarray가 같은 데이터를 가지고 있는지 비교할 때 => array_equal()
arr1 = np.arange(10)
arr2 = np.arange(10)
print(arr1)
print(arr2)
print(np.array_equal(arr1, arr2)) # True
'멀티캠퍼스 AI과정 > 03 Numpy' 카테고리의 다른 글
Numpy 08 - Numpy 집계함수와 axis(축) (0) | 2020.09.09 |
---|---|
Numpy 07 - ndarray의 전치행렬과 Iterator (0) | 2020.09.09 |
Numpy 05 - ndarray의 Indexing & Slicing (0) | 2020.09.08 |
Numpy 04 - ndarray의 shape 조절 함수 (0) | 2020.09.08 |
Numpy 03 - 랜덤으로 ndarray 생성 (0) | 2020.09.08 |
댓글