코딩하는 타코야끼

[Numpy] 3강_배열 연산 / 브로드캐스팅 본문

[T.I.L] : Today I Learned/Numpy

[Numpy] 3강_배열 연산 / 브로드캐스팅

가스오부시 2023. 5. 19. 12:33
728x90
반응형

1. 배열 연산


📍 벡터화 - 벡터 연산

  • 배열과 scalar 간의 연산은 원소단위로 계산한다.
  • 배열간의 연산은 같은 index의 원소끼리 계산 한다.
    • Element-wise(원소별) 연산 이라고도 한다.
    • 배열간의 연산시 배열의 형태(shape)가 같아야 한다.
    • 배열의 형태가 다른 경우 Broadcast 조건을 만족하면 연산이 가능하다.

🌓  배열과 스칼라간 연산

🌓  배열 간의 연산


📍 내적 (Dot product) 연산

  •  @  연산자 또는  numpy.dot(벡터/행렬, 벡터/행렬)  함수 사용

🌓  1차원 배열(벡터)간의 내적

  • 같은 index의 원소끼리 곱한뒤 결과를 모두 더한다.
  • 벡터간의 내적의 결과는 스칼라가 된다.

  • 조건
    • 두 벡터의 차원(원소의개수)가 같아야 한다.
    • 앞의 벡터는 행벡터 뒤의 벡터는 열벡터 이어야 한다.
      • numpy 에서는 vector 끼리 연산시 앞의 벡터는 행벡터로 뒤의 벡터는 열벡터로 인식해 처리한다.

🌓  행렬간의 내적 (행렬 곱)

  • 앞 행렬의 행과 뒤 행렬의 열간에 내적을 한다.
  • 행렬과 행렬을 내적하면 그 결과는 행렬이 된다.
  • 앞 행렬의 열수와 뒤 행렬의 행수가 같아야 한다.
  • 내적의 결과의 형태(shape)는 앞행렬의 행수와 뒤 행렬의 열의 형태를 가진다.
    • (3 x 2)와 (2 x 5) = (3 x 5)
    • (1 x 5)와 (5 x 1) = (1 x 1)

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

r1 = x * y # array([ 4, 10, 18])
result = np.sum(r1)
result
>>>
32
----------------------------------------------------------------
x @ y, np.dot(x, y)
>>>
(32, 32)
A = np.arange(1, 7).reshape(2, 3)
B = np.arange(1, 7).reshape(3, 2)
A.shape, B.shape
>>>
((2, 3), (3, 2))
A @ B
>>>
array([[22, 28],
       [49, 64]])
----------------------------------------------------------------
B.shape, A.shape
>>>
((3, 2), (2, 3))
----------------------------------------------------------------
B @ A
>>>
array([[ 9, 12, 15],
       [19, 26, 33],
       [29, 40, 51]])
  • 예)


📍 기술통계함수

  • 통계 결과를 계산해 주는 함수들
  • 구문
    1.  np.전용함수(배열) 
      • np.sum(x)
    2. 일부는  배열.전용함수( )  구문 지원
      • x.sum()
    • 공통 매개변수
      • axis=None: 다차원 배열일 때 통계값을 계산할 axis(축)을 지정한다. None(기본값)은 flatten후 계산한다.
  • 배열의 원소 중 누락된 값(NaN - Not a Number) 있을 경우 연산의 결과는 NaN으로 나온다.
  • 안전모드 함수
    • 배열내 누락된 값(NaN)을 무시하고 계산
  • https://docs.scipy.org/doc/numpy-1.15.1/reference/routines.statistics.html

🌓  결측치

  • a.nansum()
np.nansum(a), np.nanmax(a), np.nanmean(a)
>>>
(478.0, 87.0, 53.11111)

🌓  2차원 / 3차원 통계량 계산


4. 브로드캐스팅

  • 사전적의미 : 퍼트린다. 전파한다.
  • 형태(shape)가 다른 배열 연산시 배열의 형태를 맞춰 연산이 가능하도록 한다.
    • 모든 형태를 다 맞추는 것은 아니고 조건이 맞아야 한다.
  • 조건
    1. 두 배열의 축의 개수가 다르면 작은 축의개수를 가진 배열의 형태(shape)의 앞쪽을 1로 채운다.
      • (2, 3) + (3, ) => (2, 3) + (1, 3)
    2. 두 배열의 차원 수가 같지만 각 차원의 크기가 다른 경우 어느 한 쪽에 1이 있으면 그 1이 다른 배열의 크기와 일치하도록 늘어난다.
      • 1 이외의 나머지 축의 크기는 같아야 한다.
      • 늘리면서 원소는 복사한다.
      • (2, 3) + (1, 3) => (2, 3)+(2, 3)
       

반응형