[Numpy] 연산

밍키·2020년 8월 6일
0

파이 파이 넘파이

목록 보기
6/6

1. 벡터화 - 벡터 연산


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

1.1 벡터/행렬과 스칼라간 연산


원소별로 연산한다.

1.2 벡터/행렬의 연산


쉐잎이 같아야한다.같은 쉐잎의 배열끼리만 연산이 가능하다

2. 내적 (Dot product)


  • 고등학교때 배웠던 행렬의 곱셈 방식.
  • @ 연산자 또는 numpy.dot(벡터/행렬, 벡터/행렬) 함수 사용.

2.1 벡터간의 내적


  • 같은 index의 원소끼리 곱한뒤 결과를 모두 더한다.
  • 벡터간의 내적의 결과는 스칼라가 된다.
  • 𝑥⋅𝑦 또는 𝑥𝑇𝑦 로 표현
  • 조건
    • 두 벡터의 차원(원소의개수)가 같아야 한다.
    • 앞의 벡터는 행벡터 뒤의 벡터는 열벡터 이어야 한다.
    • numpy 에서는 vector 끼리 연산시 앞의 벡터는 행벡터로 뒤의 벡터는 열벡터로 인식해 처리한다.

2.2 행렬간의 내적


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

3. 범용함수(Ufunc, Universal function)


3.1 범용함수란


  • 벡터화를 지원하는 넘파이 연산 함수들.
    • 유니버셜 뜻이 "전체에 영향을 미치는" 이다. 그래서 이 함수는 배열의 원소 전체에 영향을 미치는 기능을 제공하는 함수다.
    • 배열의 원소별로 연산을 처리하는 함수들
  • 반복문을 사용해 연산하는 것 보다 유니버셜 함수를 사용하는 것이 속도가 빠르다.
  • https://docs.scipy.org/doc/numpy-1.15.1/reference/ufuncs.html

3.2 주요함수


3.2.1 단항 범용함수(unary ufunc)

  • 매개변수로 한개의 배열을 받는다.
  • 한 배열내의 원소별로 연산

3.2.2 이항 범용함수

  • 매개변수로 두개의 배열을 받는다.
  • 두 배열의 같은 index 원소별로 연산

3.2.3 누적연산함수 - reduce()

  • 결과가 하나만 남을 때 까지 해당 연산을 배열의 모든 요소에 반복해서 적용
  • 처리결과의 축의개수(rank)는 하나 줄어 든다.
    • 1차원 -> 스칼라
    • 2차원 - 1차원
    • 3차원 - 2차원
    • n 차원 - n-1차원
  • 구문
    • np.이항범용함수이름.reduce(배열, axis=0)

3.2.4 누적연산함수 - accumulate()

  • 배열의 원소들에 해당연산을 누적해 적용
  • 처리경과의 축의개수(rank)는 피연산자배열과 동일하다.
  • 누적해서 보여줘야하기 때문에 axis에 None을 넣을 수 없다.
  • 구문
    • np.이항범용함수이름.accumulate(배열, axis=0)

3.2.5 기술통계함수

  • 통계 결과를 계산해 주는 함수들
  • 구문
    • np.전용함수(배열)
      • np.sum(x)
    • 일부는 배열.전용함수() 구문 지원
      • x.sum()
    • 배열의 원소 중 누락된 값(NaN - Not a Number) 있을 경우 연산의 결과는 NaN으로 나온다.
  • 안전모드 함수
    • 배열내 누락된 값(NaN)을 무시하고 계산
    • 결측치 NA(Not Available), None, null, NaN 등
    • 개체지향으로는 못 씀.
  • https://docs.scipy.org/doc/numpy-1.15.1/reference/routines.statistics.html

3.3 결측치


  • 알 수 없는 값
  • 수집되지 않은 값, 모르는 값.
  • 없는 값은 아니다.
  • 넘파이에서는 : None, numpy.nan, numpy.NAN 를 결측치로 분류

3.4 boolean 배열의 계산


  • True는 1로 False는 0으로 처리.
  • 특정 조건의 값이 몇 개 있는지 count할 때 사용할 수 있다.

4. 브로드 캐스팅


  • 사전적의미 : 퍼트린다. 전파한다.
  • 형태(shape)가 다른 배열 연산시 배열의 형태를 맞춰 연산이 가능하도록 한다.
    - 모든 형태를 다 맞추는 것은 아니고 조건이 맞아야 한다.
  • 조건

    • 두 배열의 축의 개수가 다르면 작은 축의개수를 가진 배열의 형태(shape)의 앞쪽을 1로 채운다.

      • (2, 3) + (3, ) => (2, 3) + (1, 3)
    • 두 배열의 차원 수가 같지만 각 차원의 크기가 다른 경우 어느 한 쪽에 1이 있으면 그 1이 다른 배열의 크기와 일치하도록 늘어난다.

      • 1 이외의 나머지 축의 크기는 같아야 한다.
      • 늘리면서 원소는 복사한다.
      • (2, 3) + (1, 3) => (2, 3)+(2, 3)

profile
대한민국 4차 산업의 역군을 꿈꾸며.

0개의 댓글