[Numpy] 브로드캐스트 broadcast

Ethan·2022년 5월 19일
0

Numpy에서는 수학적 의미가 있는 행렬들을 함수로 제공한다.

  • 단위행렬
  • 0 행렬
  • 1 행렬
# 단위행렬
np.eye(3)
>>> [[1. 0. 0.]
	 [0. 1. 0.]
 	 [0. 0. 1.]]
 
# 0 행렬
np.zeros([2,3])
>>> [[0. 0. 0.]
	 [0. 0. 0.]]

# 1행렬
np.ones([3,3])
>>> [[1. 1. 1.]
 	 [1. 1. 1.]
 	 [1. 1. 1.]]

broadcast 연산

A = np.arange(9).reshape(3,3)
A
>>> array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
       
       
# ndarray A에 2를 상수배 했을 때
A * 2
>>> array([[ 0,  2,  4],
       	   [ 6,  8, 10],
       	   [12, 14, 16]])
           
           
# ndarray A에 2를 더했을 때,
A + 2
>>> array([[ 2,  3,  4],
           [ 5,  6,  7],
           [ 8,  9, 10]])
           
           
# 3 X 3 행렬에 1 X 3 행렬을 더했을 때
A = np.arange(9).reshape(3,3)
B = np.array([1, 2, 3])
print("A:", A)
>>> A: [[0 1 2]
        [3 4 5]
 	    [6 7 8]] 
        
print("B:", B)
>>> B: [1 2 3]

print("\nA+B:", A+B)
>>> A+B: [[ 1  3  5]
          [ 4  6  8]
          [ 7  9 11]]
          
          
# 3 X 3 행렬에 3 X 1 행렬을 더했을 때
A = np.arange(9).reshape(3,3)
C = np.array([[1], [2], [3]])
print("A:", A)
>>> A: [[0 1 2]
 		[3 4 5]
	    [6 7 8]]
 
print("C:", C)
>>> C: [[1]
	    [2]
	    [3]]
 
print("\nA+C:", A+C)
>>> A+C: [[ 1  2  3]
 		  [ 5  6  7]
          [ 9 10 11]]


# 3 X 3 행렬에 1 X 2 행렬을 더하는 것은 허용되지 않는다. 
A = np.arange(9).reshape(3,3)
D = np.array([1, 2])
print("A:", A)
>>> A: [[0 1 2]
        [3 4 5]
        [6 7 8]]

print("D:", D)
>>> D: [1 2]

print("\nA+D:", A+D)
>>> ValueError: operands could not be broadcast together with shapes (3,3) (2,) 

브로드캐스트 기능을 통해서 ndarray와 상수, 또는 서로 크기가 다른 ndarray끼리 산술연산을 할 수 있다.

공식 문서: https://numpy.org/devdocs/user/basics.broadcasting.html

# 오류 발생
print([1,2]+[3,4])
print([1,2]+3)

>>> TypeError: can only concatenate list (not "int") to list

# 브로드캐스팅
print(np.array([1,2])+np.array([3,4]))
print(np.array([1,2])+3)

>>> [4 6]
    [4 5]
profile
재미있게 살고 싶은 대학원생

0개의 댓글