Broadcasting

김지윤·2023년 4월 14일
0

Numpy

목록 보기
6/11
post-thumbnail

🛻 Broadcasting 이란 ?

일정 조건을 부합하는 다른 형태의 배열끼리 연산을 수행하는 것을 의미

가장 간단한 예를 들어보자.

import numpy as np
a1 = np.arange(5)
print(a1) 

# result
# [0 1 2 3 4]
print(a1 + 100)
 
 # result
 # [100 101 102 103 104]

위와 같은 연산으로 +, -, *, / 모두 가능하다.
.
.
.
.

⌨️ broadcasting이 되기 위한 조건

  • 두 데이터의 차원이 같아야 한다.
  • 두 데이터의 차원이 다르다면 ?

위의 경우만 broadcasting 가능 !
.
.
.

예를 들어 shape이 (5, 6) 인 데이터 b가 있다고 하자.

b = np.arange(30).reshape(5,6)
print(b)

# result
# [[ 0  1  2  3  4  5]
   [ 6  7  8  9 10 11]
   [12 13 14 15 16 17]
   [18 19 20 21 22 23]
   [24 25 26 27 28 29]]

  1. (5, 6) * scalar
print(b*5)

# result
# [[  0   5  10  15  20  25]
   [ 30  35  40  45  50  55]
   [ 60  65  70  75  80  85]
   [ 90  95 100 105 110 115]
   [120 125 130 135 140 145]]
  1. (5, 6) + (6, )
print(b)

# result
# [[ 0  1  2  3  4  5]
   [ 6  7  8  9 10 11]
   [12 13 14 15 16 17]
   [18 19 20 21 22 23]
   [24 25 26 27 28 29]]
   
b2 = np.arange(6)
print(b2)

# result
# [0 1 2 3 4 5]  <- (6, )

print(b + b2)

# result
# [[ 0  2  4  6  8 10]
   [ 6  8 10 12 14 16]
   [12 14 16 18 20 22]
   [18 20 22 24 26 28]
   [24 26 28 30 32 34]]
  1. (5, 6) + (5, 6)
print(b)

# result
# [[ 0  1  2  3  4  5]
   [ 6  7  8  9 10 11]
   [12 13 14 15 16 17]
   [18 19 20 21 22 23]
   [24 25 26 27 28 29]]

b3 = np.arange(100,130).reshape(5,6)
print(b3)

# result
# [[100 101 102 103 104 105]
   [106 107 108 109 110 111]
   [112 113 114 115 116 117]
   [118 119 120 121 122 123]
   [124 125 126 127 128 129]]

print(b + b3)

# result 
# [[100 102 104 106 108 110]
   [112 114 116 118 120 122]
   [124 126 128 130 132 134]
   [136 138 140 142 144 146]
   [148 150 152 154 156 158]]
  • example
    (5, 3) 에서 axis=1을 따라
    첫째 열에는 × 2
    둘재 열에는 × 10
    셋째 열에는 × 12 를 해보자.
c= np.arange(15).reshape(5,3)
print(c)

# result
# [[ 0  1  2]
   [ 3  4  5]
   [ 6  7  8]
   [ 9 10 11]
   [12 13 14]]
   
c1 = [2, 10, 12]    # (3, ) -> c 와 broadcasting 가능

print(c * c1)

# result
# [[  0  10  24]
   [  6  40  60]
   [ 12  70  96]
   [ 18 100 132]
   [ 24 130 168]]
profile
데이터 분석 / 데이터 사이언티스트 / AI 딥러닝

0개의 댓글