Numpy 배열 연산
# 배열 연산
import numpy as np
x = np.array([[1,2], [3,4]])
y = np.arange(5, 9).reshape((2,2))
y = y.astype(np.float32)
print(x, type(x), x.dtype)
print(y, type(y), end='\n\n')
print(x+y, end='\n\n') # + 연산
print(np.add(x,y), end='\n\n') # + 연산
print(np.subtract(x,y), end='\n\n') # - 연산
print(x-y, end='\n\n') # - 연산
print(np.divide(x,y), end='\n\n') # / 연산
print(x*y, end='\n\n') # * 연산
# 출력 결과
[[1. 2.]
[3. 4.]]
[[5. 6.]
[7. 8.]]
[[ 6. 8.]
[10. 12.]]
[[ 6. 8.]
[10. 12.]]
[[-4. -4.]
[-4. -4.]]
[[-4. -4.]
[-4. -4.]]
[[0.2 0.33333334]
[0.42857143 0.5 ]]
[[ 5. 12.]
[21. 32.]]
행렬의 연산은 자리끼리 연산해주기 때문에 쉽게 해결하실 수 있습니다.
연산 결과를 보기에 앞서, reshape 라는 함수가 존재합니다.
reshape 함수란 배열의 차원의 크기를 변경하는 방법으로, 배열의 요소의 개수는 동일하고 배열의 차원만 변경해줍니다.
덧셈 -> add(배열1, 배열2) , add 대신 + 사용 가능합니다.
뺄셈 -> subtract(배열1, 배열2) , subtract 대신 - 사용 가능합니다.
곱셉 -> multiply(배열1, 배열2) , multiply 대신 * 사용 가능합니다.
나눗셈 -> divide(배열1, 배열2) , divide 대신 / 사용 가능합니다.
Numpy 벡터의 내적
벡터의 내적 함수에 대하셔 내적 계산시에는 dot 메소드를 필요로합니다.
형태는 다음과 같습니다.
z = dot(x,y)
z = dot(x,y,dim)
- 내적 함수를 계산하려면 열과 행이 일치하여야하고 만약, 일치하지 않는다면 가공을 필요로 하고 T(transform)를 이용합니다.
- 2차원 배열을 벡터 계산하면 1차 배열의 결과가 나오고, 1차 배열을 벡터계산하면 스칼라 결과가 출력됩니다.
import numpy as np
v = np.array([9,10])
w = np.array([11,12])
x = np.array([[1,2], [3,4]])
y = np.arange(5, 9).reshape((2,2))
print(v.dot(w), end='\n\n')
print(np.dot(v, w), end='\n\n')
print(np.dot(x, y), end='\n\n')
# 출력 결과
219
219
[[19. 22.]
[43. 50.]]
v.dot(w) 의 경우 v와 w의 내적함수를 구한 것으로 (9 *11) + (10*12) 를 하여 219가 출력된 것입니다.
위와 동일한 식으로 np.dot(v, w) 가 있습니다. 위와 계산 방식은 동일하기에 출력 결과도 같습니다.
2차원 배열의 경우
( 1 * 5 ) + ( 2 * 7 ) = 19 값은 1행 1열에 저장
( 1 * 6 ) + ( 2 * 8 ) = 22 값은 1행 2열에 저장
( 3 * 5 ) + ( 4 * 7 ) = 43 값은 2행 1열에 저장
( 3 * 6 ) + ( 4 * 8 ) = 50 값은 2행 2열에 저장이 됩니다.
'python' 카테고리의 다른 글
[Python] (6) Numpy broadcasting (브로드캐스팅) (0) | 2020.06.14 |
---|---|
[Python] Numpy (5) 집합, 전치 (0) | 2020.06.02 |
[Python] Numpy (3) - 슬라이싱 , 서브배열 (0) | 2020.06.01 |
[Python] Numpy (2) - zeros, ones, full, eye, 난수 (0) | 2020.05.31 |
[python] Numpy 데이터타입, 메모리저장, 배열 (0) | 2020.05.28 |