새소식

반응형
SCIENCE OF DATA/🔎 통계적 추론의 기술

Broad Casting Rules: 원리

  • -

 

브로드캐스팅

  • 규칙
    1. 차원 수가 다르면 차원이 작은 배열 앞에 1인 차원을 추가
    2. 대응하는 차원의 크기가 같거나 둘 중 하나가 1이어야 함
    3. 확장 시 크기 1인 차원이 해당 위치의 다른 배열 차원 크기로 반복

 

위 코드 사례 분석

  • a 변환: (5, ) → (1,5) → (3,5)로 변환
  • b와 element wise하게 연산
  • ※ 영상 제작용 코드는 댓글 다시면 메일로 보내드릴게요!
a = [0, 1, 2, 3, 4]        # a.shape == (5,)
b = [[ 0,  1,  2,  3,  4],
     [ 5,  6,  7,  8,  9],
     [10, 11, 12, 13, 14]]  # b.shape = (3, 5)
c = a+b
c = [[ 0,  2,  4,  6,  8],
       [ 5,  7,  9, 11, 13],
       [10, 12, 14, 16, 18]] # c.shape: (3, 5)

어려운 사례 분석

(jnp.arange(5)[None] < jnp.array(2)[None, None]).shape
(jnp.arange(5)[None, None] < jnp.array(2)[None]).shape
  • 첫 번째 표현식 분석: jnp.arange(5)[None] < jnp.array(2)[None, None]
  1. jnp.arange(5)[None]의 shape: (1, 5)
    • arange(5)[0,1,2,3,4]로 shape (5,)
    • [None]은 차원을 추가해 [[0,1,2,3,4]]로 shape (1, 5)가 됨
  2. jnp.array(2)[None, None]의 shape: (1, 1, 1)
    • array(2)는 스칼라값 2로 shape ()
    • [None, None]은 차원을 두 개 추가해 shape (1, 1, 1)이 됨
  3. 브로드캐스팅 적용:
    • (1, 5) vs (1, 1, 1)
    • 차원 수가 다르므로 작은 쪽 앞에 1 추가: (1, 1, 5) vs (1, 1, 1)
    • 대응 차원 비교: (1=1, 1=1, 5≠1) → 세 번째 차원에서 15로 확장
    • 최종 shape: (1, 1, 5)

두 번째 표현식 분석:

jnp.arange(5)[None, None] < jnp.array(2)[None]
  1. jnp.arange(5)[None, None]의 shape: (1, 1, 5)
    • arange(5)는 shape (5,)
    • [None, None]은 차원을 두 개 추가해 shape (1, 1, 5)가 됨
  2. jnp.array(2)[None]의 shape: (1, 1)
    • array(2)는 스칼라 2로 shape ()
    • [None]은 차원을 하나 추가해 shape (1, 1)이 됨
  3. 브로드캐스팅 적용:
    • (1, 1, 5) vs (1, 1)
    • 차원 수가 다르므로 작은 쪽 앞에 1 추가: (1, 1, 5) vs (1, 1, 1)
    • 대응 차원 비교: (1=1, 1=1, 5≠1) → 세 번째 차원에서 15로 확장
    • 최종 shape: (1, 1, 5)

두 경우 모두 최종 결과 shape은 (1, 1, 5)이지만, 과정에서 브로드캐스팅이 다르게 적용됩니다.

첫 번째는 (1, 5)(1, 1, 5)로 확장되고, 두 번째는 이미 (1, 1, 5)이므로 다른 배열이 맞춰집니다.

반응형
Contents

소중한 공감 감사합니다

포스팅 주소를 복사했습니다