DataScience

Numpy

ai-world.tistory.com 2019. 12. 4. 11:46

Introducing Numpy

 numpy 배열

numpy는 과학계산을 수행하는 파이썬 핵심 패키지
주요 제공 기능
    - N 차원 배열
    - 원소별 연산(브로드캐스팅)
    - 선형대수학 등 핵심 수학 연산
    - C/C++, 포트란 코드 인터페이스 제공
    
numpy 공식 레퍼런스
    - https://docs.scipy.org/doc/numpy/reference/
    
Python list vs numpy 배열

Python의 리스트는 거의 모든 종류의 객체를 담을 수 있어 유연하지만, 속도와 메모리 효율이 좋지 않다는 것이 단점
numpy의 배열은 한 행에 동일 형식의 원소를 저장
    - Python의 리스트에 비해 유연성은 떨어지지만
    - 빠른 연산과 메모리 효율에서 강점을 보인다
    

numpy의 사용
일반적으로 numpy는 np라는 별칭으로 줄여 임포트한다

 

numpy 배열 만들기

Python의 리스트를 이용한 생성
    - 각 값들은 (양의 정수)튜플 형태로 인덱싱됨
    - shape는 각 차원의 크기를 튜플로 반환
    - np.ndim은 배열이 몇 차원인지 의미
    - 다차원 배열을 만들기 위해서는 리스트를 중첩하여 생성

 

 

 

 

List 없이 array 만들기
    - zeros() : 0으로 채워진 배열
    - ones() : 1로 채워진 배열
    - full() : 지정한 상수로 채워진 배열
    - eye() : 단위 행렬 생성
    - empty_like() : 주어진 배열과 동일한 shape를 가지며 비어 있는 배열 생성

 

 

 

범위 벡터의 생성
    - arange() : 범위 값으로 배열 만들기
    - linspace() : 선형 간격의 벡터 만들기
    - logspace() : 로그 간격의 벡터 만들기

 

 

 

array의 타입

numpy의 array는 한 가지 타입만 담을 수 있다
    - 데이터 타입을 지정하지 않으면 임의로 적절한 데이터 타입을 선택
    - dtype으로 array의 타입을 체크할 수 있다
    - array 생성시 dtype 옵션 파라미터로 데이터 타입을 강제할 수 있다
    - astype() 메서드를 이용하면 다른 데이터타입으로 변경할 수 있다
    
numpy 자료형 참조 페이지 : https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

 

Data type objects (dtype) — NumPy v1.17 Manual

Data type objects (dtype) A data type object (an instance of numpy.dtype class) describes how the bytes in the fixed-size block of memory corresponding to an array item should be interpreted. It describes the following aspects of the data: Type of the data

docs.scipy.org

 

 

array의 재구성

생성된 array는 다양한 형태로 변경될 수 있다
    - reshape() : 배열을 다른 형태로 변경
    - ravel() : 다차원 배열을 1차원 형태로 변경
    - transpose() : 행렬의 전치. 열 <-> 행
        - 간단히 T 속성을 사용해도 무방

 

 

 

array의 인덱싱과 슬라이싱

numpy의 array 인덱싱과 슬라이싱은 기본적으로는 파이썬의 인덱싱/슬라이싱 방식과 거의 동일하다
numpy의 array는 다차원인 경우가 많기 때문에 각 차원별 인덱스/슬라이스 범위를 잘 정해주어야 한다

 

 

조건적 인덱싱

- where() : 조건에 해당하는 인덱스를 추출
- delete() : 특정 인덱스 삭제

 

 

Boolean 배열 인덱싱

- 논리 연산을 수행하여 복수의 조건을 만족하는 인덱스를 추출해내는 방법
- numpy 배열 불린 연산에서는 &(and), |(or), ~(not) 연산자를 사용할 수 있다

- Boolean 배열 인덱싱 참조 : https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html

 

Indexing — NumPy v1.17 Manual

Indexing ndarrays can be indexed using the standard Python x[obj] syntax, where x is the array and obj the selection. There are three kinds of indexing available: field access, basic slicing, advanced indexing. Which one occurs depends on obj. Note In Pyth

docs.scipy.org

 

 

배열 연산

- 기본적 수학 함수는 배열의 각 요소별로 동작
- 연산자를 이용 동작하거나 numpy 함수 모듈을 이용하여 동작함

 

 

numpy 행렬 곱

- *, multiply는 기본적으로 요소의 곱
- 벡터의 내적, 벡터와 행렬의 곱, 행렬곱을 위해서는 dot 함수 사용
- dot 메서드는 모듈 함수, 배열 객체의 인스턴스 양쪽 모두 사용 가능

 

 

array 연산 함수

- numpy는 배열 연산에 유용하게 사용되는 많은 함수를 제공
- 배열 연산 함수 참조 : https://docs.scipy.org/doc/numpy/reference/routines.math.html

 

Mathematical functions — NumPy v1.17 Manual

gcd(x1, x2, /[, out, where, casting, order, …]) Returns the greatest common divisor of |x1| and |x2|

docs.scipy.org

 

 

브로드캐스팅

- numpy에서 shape가 다른 배열 혹은 배열과 스칼라 사이의 산술 연산이 가능하도록 하는 매커니즘
- Universal Function이라고도 함

 

 

numpy 난수 발생

- 임의의 수가 필요할 때, 혹은 전체 데이터를 기반으로 샘플링을 하고자 할 때는 난수가 필요
- numpy의 난수 발생은 단순히 임의의 난수를 넘어 다양한 통계(분포:distribution) 기반의 샘플링을 위한 난수 기능을 다양하게 제공
- random 패키지 내에 위치

- 다양한 난수 메서드들

    - randint() : 정수 난수 발생
    - randn() : n차원 난수 발생
    - binomial() : 이항분포
    - hypergeometric() : 초기하분포
    - poisson() : 포아송 분포
    - normal() : 정규 분포
    - standart_t() : t-분포
    - uniform() : 균등분포
    - f() : f-분포
    
    - seed() : 재현 가능성(Reproductibility)을 위한 난수 초기값 설정

 

 

 

numpy 파일 저장/불러오기

numpy는 바이너리 형태로 저장 가능하며 저장된 데이터는 나중에 불러와 다시 사용할 수 있다

저장 메서드
    - save() : npy(비압축) 형태로 저장
    - savez() : npz(압축) 형태로 저장. 압축 과정을 거치므로 save 메서드에 비해 속도는 느리지만, 대용량의 데이터 저장엔 용량의 측면에서 유리
    
- 불러오기 메서드
    - load()