반응형

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열에 저장이 됩니다.

 

 

반응형

+ Recent posts