본문 바로가기

Study/Python for Data Analysis - 한빛

[Book]4. Numpy 기본 : 배열과 벡터연산

4. Numpy 기본 : 배열과 벡터 연산

 

서론

  • Numpy는 Numerical Python의 줄임말, 파이썬에서 산술 계산을 위한 가장 중요한 필수 패키지 중 하나
  • Numpy기능
  • 효율적인  다차원 배열인 ndarray는 빠른 배열 계산과 유연한 브로드 캐스팅 기능 제공
  • 반복문 필요 없이 전체 배열을 빠르게 계산할 수 있는 표준 수학 함수
  • 선형대수, 난수 생성기, 푸리에 변환 기능
  • Numpy는 내부적으로 데이터를 다른 내장 파이썬 객체와 구분된 연속된 메모리 블록에 저장
  • Numpy의 각종 알고리즘은 모두 C로 작성되어 타입 검사나 다른 오버헤드 없이 메모리를 직접 조작할 수 있음

4.1 Numpy ndarray : 다차원 배열 객체

  • ndarray라고 하는 N차원 배열 객체는 파이썬에서 사용할 수 있는 대규모 데이터 집합을 담을 수 있는 빠르고 유연한 자료구조
arr1.shape # 차원의 크기 알려줌 oufpt :(2,3)
arr1.dtype # 자료형 알려줌 out :  dtype('float64')
  • np.array는 새로운 배열을 생성하기 위한 여러 함수를 가지고 있음
np.zeros(5)
# out : array([0, 0, 0, 0 ,0])

np.arange(5) # arange는 파이썬의range
# out : array([0,1,2,3,4])

 

 

팬시 색인
  • 정수 배열을 사용한 색인을 설명하기 위해 Numpy에서 차용한 단어
  • 팬시 색인은 슬라이싱과는 달리 선택된 데이터를 새로운 배열로 복사
import numpy as np
arr = np.empty((4,2))
arr
#out ======================= 
array([[9.88131292e-324, 0.00000000e+000],
       [4.67586466e-310, 3.60739284e-313],
       [2.05833592e-312, 4.67586466e-310],
       [0.00000000e+000, 0.00000000e+000]])
# ===========================
arr[[3, 0 ,1 ,2]]
#out ======================= 
array([[0.00000000e+000, 0.00000000e+000],
       [9.88131292e-324, 0.00000000e+000],
       [4.67586466e-310, 3.60739284e-313],
       [2.05833592e-312, 4.67586466e-310]])
# ===========================

4.2 유니버설 함수

  • ndarray 안에 있는 데이터 원소별로 연산을 수행하는 함수
  • 하나 이상의 스칼라 값을 받아서 하나 이상의 스칼라 결괏값을 변화하는 간단한 함수를 고속으로 수행할 수 있는 벡터화된 래퍼 함수
  • sqrt나 exp 같은 함수들은 단항 유니버설 함수
  • add나 maximum처럼 2개의 인자를 취해서 단일 배열을 반환하는 함수는 이항 유니버설 함수
import numpy as np
arr = np.arange(5)
arr
#out ======================= 
array([0, 1, 2, 3, 4])
#out ======================= 

np.sqrt(arr)
#out ======================= 
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ])
#out =======================
단항 유니버설 함수 예시
  • abs, fabs : 각 원소의 절댓값을 구한다. 복소수가 아닌 경우에는 빠른 연산을 위해서 fabs사용
  • sqrt : 각 원소의 제곱근을 계산한다
  • square : 각 원소의 제곱을 계산
  • exp : 각 원소에서 지수 e^x를 계산한다
  • isnan : 각 원소가 숫자가 아닌지를 나타내는 불리언 배열을 반환한다

 

이항 유니버설 함수 예시
  • add : 두 배열에서 같은 위치의 원소끼리 더한다
  • substract : 첫 번째 배열의 원소에서 두 번째 배열의 원소를 뺸다

4.3 배열을 이요한 배열 지향 프로그래밍

  • Numpy 배열 연산을 사용해서 반복문을 명시적으로 제거하는 기법인 벡터화로, 파이썬 연산에 비해 2~3에서 많게는 수백 배 까지 바른 산술 연산을 할 수 있음
예시
  • np.where
  • np.sum(arr), arr.sum()
  • np.unique(arr)

4.4 배열 데이터의 파일 입출력

  • Numpy는 디스크에서 텍스트나 바이너리 형식의 데이터를 불러오거나 저장할 수 있음

4.5 선형 대수

  • 매트랩 같은 언어와 다르게 두 개의 2차원 배열을 * 연산자로 곱하면 행렬 곱셈이 아니라 대응하는 각각의 원소의 곱을 계산
  • 행렬 곱셈음 배열 메서드이자 numpy 네임스페이스 안에 있는 dot 함수 이용
  • numpy.linalg는 행렬의 분할과 역행렬, 행렬식과 같은 것들을 포함