Appia의 IT세상

파이썬[Python] numpy 브로드캐스팅(Broadcasting)정의 및 조건 본문

Python/Python Numpy

파이썬[Python] numpy 브로드캐스팅(Broadcasting)정의 및 조건

Appia 2020. 3. 20. 07:58
반응형

Numpy에서 브로드캐스팅(Broadcasting)이라는 단어를 매우 많이 사용합니다. 실제로 이 단어는 통신에서는 주변에 모든에게 패킷을 뿌리는 그런 느낌이었습니다. (물론 살짝 어감의 차이는 있을 수 있습니다.) , 또한 영어 단어로서는 방송하다 흩뿌리다라는 그런 의미를 가지고 있습니다. 하지만 파이썬[Python] Numpy에서는 조금 다른 의미로 사용이 되어 집니다. 그래서 오늘은 파이썬[Python] Numpy 브로드캐스팅(Broadcasting)정의 및 조건에 대해서 한번 알아보고자 합니다. 

 

파이썬[Python] Numpy에서 말하는 브로드캐스팅(Broadcasting)은 즉, 일정 조건을 부합하는 다른 형태의 배열끼리 연산을 수행하는 것을 의미합니다. (앞서 내용과 너무 다르죠?) 

 

 그럼 다음 코드를 한번 살펴보시죠. 

example) 

import numpy as np
 
Value = np.array([[2,10,15],[1,2,3]])
 
Value1 = np.array([1])
 
Value2 = np.array([1,2])
 
print(Value + Value1)
 
print(Value + Value2)
cs

result) 

[[ 3 11 16]
 
 [ 2  3  4]]
 
Traceback (most recent call last):
 
  File "C:/Users/Bens/PycharmProjects/Blogger/ndarrayma.py", line 8in <module>
 
    print(Value + Value2)
    
ValueError: operands could not be broadcast together with shapes (2,3) (2,)
cs

위의 소스 코드를 보고 간단히 이야기를 해보겠습니다. 저는 처음에 Value라는 변수를 2x3형태의 배열을 생성을 했습니다. 이 배열과 맴버가 하나인 배열을 브로드캐스팅(Broadcasting)을 시도 했습니다. 정상적으로 잘 되었습니다. 

그래서 이번에는 맴버가 두 개짜리 배열을 생성하여 브로드캐스팅(Broadcasting)을 시도 했더니 바로 다음과 같은 메시지를 나타냈습니다. 

ValueError: operands could not be broadcast together with shapes (2,3) (2,) 

 

그럼 이제 Numpy의 브로드캐스팅(Broadcasting)이 되기 위한 몇가지 조건을 대해서 이야기를 해보겠습니다. 

 

1. 맴버가 하나인 배열은 어떤 배열에나 브로드캐스팅(Broadcasting)이 가능(단, 맴버가 하나도 없는 빈 배열을 제외)

ex) 4x4 + 1

2. 하나의 배열의 차원이 1인 경우 브로드캐스팅(Broadcasting)이 가능

ex) 4x4 + 1x4

3. 차원의 짝이 맞을 때 브로드캐스팅(Broadcasting)가능  

ex) 3x1 + 1x3

 

그럼 위의 부분을 바탕으로 몇가지 예시를 더 살펴보도록 하겠습니다. 

example)

import numpy as np
 
Value = np.array([[1,2,3,4],[2,5,6,7],[8,9,10,11],[12,13,14,15]])
 
Value1 = np.array([1])
 
Value2 = np.array([3,3,3,3])
 
Value3 = np.array([4,5,6,7]).reshape(4,1)
 
print(Value + Value1) #4x4 + 1
 
print(Value + Value2) #4x4 + 1x4
 
print(Value2 + Value3) #1x4 + 4x1
cs

result)

# result for print(Value + Value1), 4x4 + 1
 
[[ 2  3  4  5]
 
 [ 3  6  7  8]
 
 [ 9 10 11 12]
 
 [13 14 15 16]]
 
# result for print(Value + Value1), 4x4 + 1x4
 
[[ 4  5  6  7]
 
 [ 5  8  9 10]
 
 [11 12 13 14]
 
 [15 16 17 18]]
 
 # result for print(Value + Value1), 4x1 + 1x4
 
[[ 7  7  7  7]
 
 [ 8  8  8  8]
 
 [ 9  9  9  9]
 
 [10 10 10 10]]
cs

 

한가지 조금 다른 점이 있다면, 바로 마지막 브로드캐스팅(Broadcasting)이 진행된 4x1 + 1x4입니다. 이때의 양축의 맞축어 새로운 배열이 생성됩니다. 즉 4x4 형태의 배열이 생성이 됩니다. 

numpy 브로드 캐스팅  조건 및 연산 방안

위의 그림대로 예시를 구성해서 한번 브로드캐스팅(Broadcasting)을 진행해봤습니다. 다른 부분들은 그래도 이해가 용이하지만, 마지막 부분만 다시 한번 기억해주시길 바랍니다. 

 

오늘은 위의 그림과 같은 형태로 예시를 구성해서 브로드캐스팅(Broadcasting)이 무엇이고, 관련된 조건 및 연산 결과에 대해서 살펴봤습니다. 생각보다는 어렵지 않지만, 살짝 헷갈릴 수 있는 내용이라서 한번 다루어봤습니다. 제 포스팅을 보시는 분들이 쉽게 이해하시고 도움이 되셨으면 좋겠습니다. 혹 궁금하시거나 문의 사항이 있으시면 댓글 또는 방명록에 글 부탁드립니다. 감사합니다. 

반응형
Comments