반응형
넘파이는 사칙연산 +, -, *, / 를 사용하여 두 배열의 요소들간의 사칙연산을 할 수 있음
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[2, 3, 4], [5, 6, 7]])
arr1 + arr2
array([[ 3, 5, 7],
[ 9, 11, 13]])
arr2 - arr1
array([[1, 1, 1],
[1, 1, 1]])
arr1 * arr2
array([[ 2, 6, 12],
[20, 30, 42]])
arr2 / arr1
array([[2. , 1.5 , 1.33333333],
[1.25 , 1.2 , 1.16666667]])
같은 위치의 요소와 연산하므로 두 배열의 shape는 같아야 연산할 수 있고
shape가 다르면 valueerror가 뜬다.
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[1, 2],[3, 4]])
arr1+arr2
ValueError: operands could not be broadcast together with shapes (2,3) (2,2)
arr1.dot(arr2)을 사용하면 일반적인 행렬곱 연산
arr2.dot(arr1)
array([[ 9, 12, 15],
[19, 26, 33]])
첫번째 배열의 열과 두번째 배열의 행의 shape가 같아야 dot 연산 가능
shape가 (a,b)와(c,d) 일때 b와 c가 같아야 dot 행렬곱이 가능하고
연산후 반환되는 행렬의 shape는 (a, d)이다.
shape가 맞지 않으면 valueerror를 띄운다.
arr1.dot(arr2)
ValueError: shapes (2,3) and (2,2) not aligned: 3 (dim 1) != 2 (dim 0)
arr.T 행과열을 서로 바꾸는 shape의 변환 transform
arr
array([[1, 2, 3],
[4, 5, 6]])
arr.shape
(2, 3)
arr.T
array([[1, 4],
[2, 5],
[3, 6]])
arr1.T.shape
(3, 2)
브로드캐스팅
shape이 다른 배열 간 연산이 안되지만 특정 shape일 때는 가능함.
shape이 다른 배열 간 연산을 지원하는 기능을 브로드캐스팅이라 함.
상수(스칼라값)을 연산하면 각 요소에 상수값이 연산된다.
arr1
array([[1, 2, 3],
[4, 5, 6]])
arr1 + 3
array([[4, 5, 6],
[7, 8, 9]])
arr1 * 3
array([[ 3, 6, 9],
[12, 15, 18]])
arr1 = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])
arr2 = np.array([1,2,3])
arr1+arr2
array([[2, 3, 4],
[3, 4, 5],
[4, 5, 6],
[5, 6, 7]])
arr1의 [1, 1, 1]과 arr2의 [1, 2, 3]이 연산되어 [2, 3, 4]를 반환
arr1의 [2, 2, 2]과 arr2의 [1, 2, 3]이 연산되어 [3, 4, 5]를 반환
arr1의 [3, 3, 3], [4, 4, 4]도 마찬가지로 연산되어 위와 같은 배열을 반환
arr1 = np.array([[1],[2],[3],[4]])
arr2 = np.array([1,2,3])
arr1 + arr2
array([[2, 3, 4],
[3, 4, 5],
[4, 5, 6],
[5, 6, 7]])
이러한 형태도 가능하나 난 멍청하니까 못쓰겠다.
반응형
'파이썬 > Numpy' 카테고리의 다른 글
Numpy 배열의 데이터 비교 방법(any, all, where, isnan, argmax, argmin) (0) | 2019.08.08 |
---|---|
Numpy 연산(sum, mean, std, exp, vstack, hstack)과 axis의 의미 (0) | 2019.08.07 |
Numpy 배열 생성 방법(arange, zeros, ones, random) (0) | 2019.08.07 |
Numpy 요소선택 인덱싱, 슬라이싱 (indexing, slicing) (0) | 2019.08.07 |
Numpy shape 변환 (reshape, flatten) (1) | 2019.08.07 |
댓글