티스토리 뷰

반응형

파이썬 numpy의 array 사칙연산 및 행렬 계산을 공부하면서 정리한 글입니다.

사칙연산

numpy는 기본적으로 array 간의 사칙연산을 지원합니다.

행과 열이 같은 배열을 계산하면 값은 위치에 있는 값들이 계산됩니다.

이런 현상을 Element-wise operations이라 하며 Shape이 같을 때 발생합니다.

import numpy as np

test_a = np.array([[1,2,3],[4,5,6]], np.float)

덧셈

test_a + test_a  

-- 출력 --
array([[ 2.,  4.,  6.],
       [ 8., 10., 12.]])

뺄셈

test_a - test_a  

-- 출력 --
array([[0., 0., 0.],
       [0., 0., 0.]])

곱셉

test_a * test_a  

-- 출력 --
array([[ 1.,  4.,  9.],
       [16., 25., 36.]])

나눗셈

test_a / test_a

-- 출력 --
array([[1., 1., 1.],
       [1., 1., 1.]])

 

 

Dot product - 행렬 곱

행렬 곱을 사용하려면 기본 연산 dot 함수를 사용하여 할 수 있습니다.

test_a = np.arange(1,7).reshape(2,3)
test_a

-- 출력 --
array([[1, 2, 3],
       [4, 5, 6]])
test_b = np.arange(7,13).reshape(3,2)
test_b

-- 출력 --
array([[ 7,  8],
       [ 9, 10],
       [11, 12]])
test_a.dot(test_b)

-- 출력 -- 
array([[ 58,  64],
       [139, 154]])

transpose

transpose는 행과 열을 바꿔 줍니다.

transpose() 또는 T Attribute를 사용할 수 있습니다.

test_a.T

-- 출력 -- 
array([[1, 4],
       [2, 5],
       [3, 6]])
test_b.transpose()

-- 출력 -- 
array([[ 7,  9, 11],
       [ 8, 10, 12]])
test_b.transpose()

-- 출력 -- 
array([[ 7,  9, 11],
       [ 8, 10, 12]])

 

 

Broadcating

array operation 중 중요한 개념입니다.

Shape이 다른 배열간 연산을 자동으로 지원하는 기능을 Broadcating이라 합니다.

열 또는 행이 어느 정도 shape이 맞아야 자동으로 계산해줍니다.

numpy broadcasting 처리 로직

test_matrix = np.array([[1,2,3],[4,5,6]], np.float)
scalar = 3
test_matrix + scalar # 전체 행, 열에 모두 Scalar 값이 더해짐

-- 출력 --
array([[4., 5., 6.],
       [7., 8., 9.]])
test_matrix - scalar

-- 출력 --
array([[-2., -1.,  0.],
       [ 1.,  2.,  3.]])
test_matrix * scalar
test_matrix / scalar
test_matrix // scalar
test_matrix ** scalar

곱셉, 나눗셈, 나머지, 제곱 모두 지원합니다.

test_matrix = np.arange(1,13).reshape(4,3)
test_matrix

-- 출력 --
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
test_vector = np.arange(10,40,10)
test_vector

-- 출력 --
array([10, 20, 30])
test_matrix + test_vector

-- 출력 -- 
array([[11, 22, 33],
       [14, 25, 36],
       [17, 28, 39],
       [20, 31, 42]])

 위 예제는 broadcating 되어 자동으로 계산됩니다.

 

 

참고 

 

https://www.youtube.com/watch?v=whtNpVWYLIo&list=PLBHVuYlKEkULZLnKLzRq1CnNBOBlBTkqp&index=7

반응형
댓글