SJ_Koding

Numpy의 연산, Broadcast(Element Wise) 본문

Data analysis/Numpy

Numpy의 연산, Broadcast(Element Wise)

성지코딩 2022. 1. 1. 01:05

안녕하세요, 성지코딩입니다!

이번 게시글은 Numpy의 연산에 대해 알아봅니다. 여기서 Broadcast의 개념은 Pandas에서도 이어지니 꼭 알아두셔야합니다. 어쩌면 Numpy의 꽃이라고 볼 수 있겠네요.

 

 

Numpy Array의 연산은 Broadcast(Element Wise)연산으로 이루어집니다.

    Array간의 연산은 각 요소별 연산이 이뤄지며 연산 함수 또는 연산자를 이용합니다.

    Array와 Scalar간의 연산은 Scalar 값이 Array 각 요소별로 계산합니다.

 

그림으로 설명합니다.

A (oper) B = C

2 by 2 Array간의 연산입니다. 여기서 리스트로 연산을 진행할 때의 단점이 부각됩니다.

terminal에서 진행한 리스트 간의 덧셈 연산

리스트간의 + 연산은 값을 더하는 것이 아니라 그저 이어 붙일 뿐입니다. 리스트로 진행 할 경우에는 반복문을 사용해서 연산하는 것 밖에 방법이 없습니다.

 

코드로 살펴봅니다.


Array와 Array간의 연산 (덧셈, 뺄셈)

x = np.array([[1, 2], [3, 4]])
y = np.array([[5, 6], [7, 8]])

print(x + y)
print(np.add(x, y))

[[ 6    8]

 [10   12]]

[[ 6    8]

 [10    12]]

print(x - y)
print(np.subtract(x, y))

[[ -4   -4]

 [ -4    -4]]

[[-4    -4]

 [-4    -4]]

Array와 Array간의 연산 (곱셈, 나눗셈)

 

print(x * y)
print(np.multiply(x, y))

[[ 5   12]

 [ 21    32]]

[[ 5   12]

 [ 21    32]]

print(x / y)
print(np.divide(x, y))

[[0.2                 0.33333333]

 [0.42857143  0.5                ]]

[[0.2                 0.33333333]

 [0.42857143  0.5                ]]

Array와 Array간의 연산 (내적 연산, 제곱근, 행렬 곱)

 

print(x @ y)
print(np.dot(x, y))

[[19    22]

 [43    50]]

[[19    22]

 [43    50]]

print(np.sqrt(x))
print(np.matmul(x, y))

[[1.                    1.41421365]

 [1.73205081   2.                 ]]

[[19    22]

 [43    50]]

 

Array와 Scalar 연산

x = np.array([[1, 2], [3, 4]])
print(x+1, 'n')
print(x-1, 'n')
print(x*2, 'n')
print(x/2, 'n')

[[2,   3]

 [4,   5]]

 

[[0,   1]

 [2,   3]

 

[[2   4]

 [6   8]

 

[[0.5   1.   ]

 [1.5    2.  ]]

 

 

이번 시간에는 BroadCast에 대해 아주 간단하게 알아 보았는데요, 나중에 BroadCast응용 부분이 나오게 되면 보충 설명을 진행하겠습니다! 다음 게시글에는 Numpy Indexing에 대해 다룹니다. Numpy는 정수 인덱싱, 조건 인덱싱, 팬시 인덱싱을 지원합니다.

감사합니다.

 

-sjkoding-