국문과 유목민

Numpy 함수 정리 본문

IT 견문록/함수 및 코드 (디지털치매 대비)

Numpy 함수 정리

논곰 2022. 1. 21. 21:38
`Numpy` 라이브러리 함수 중 자주 사용하는 함수들의 종류와 간단한 사용법을 다루는 포스팅입니다. 구체적인 내용을 더 알고싶다면 Numpy 공식 Document를 확인해주시기 바랍니다. 
코드 설명 시 하단 코드에서 임의의 Numpy 객체는 ndarray(1, ..., n)로 가정하겠습니다. 추후 함수를 사용할 때는 해당 부분에 사용하고자 하는 변수를 대입해주시면 됩니다.

Numpy Base

행렬을 어떻게 표현할 것인가에서 만들어지게 됐다. Matrix와 Vector같은 Array 연산의 사실상 표준이다. 일반 List에 비해 빠르고, 반복문 없이 데이터 배열에 대한 처리를 지원한다. 일반적으로 numpy는 np라는 alias이용

Ndarray

numpy에서 사용하는 객체를 'ndarray'객체라고 하며, 파이썬의 리스트와는 달리 하나의 데이터 type만 넣을 수 있다.

ArrayShape

차원이 늘어날 수록 인덱스가 밀린다고 생각하면 이해하기 쉽다. (추후 concat, drop 등에 axis 활용 시 중요)

  • Vector(열)
  • Matrix(행, 열)
  • Tensor(차원, 행, 열)
# 이후 코드에서 numpy 라이브러리는 np로 import 돼 있다고 가정
import numpy as np

np.arrray(list변수, type=np.float64) # 다양한 데이터 타입 가능

np.shape(ndarray) # ndarray의 데이터 모양 반환
np.dtype(ndarray) # ndarray의 데이터 Type 반환

ndarray.size # 전체 원소의 개수 반환
ndarray.ndim # ndarray의 차원 반환
ndaary.nbytes # ndarray object의 메모리크기 반환

Handling Shape

넘파이에서 생성된 객체의 차원을 바꾸고 데이터를 뽑는데 사용되는 메소드

- reshape, flatten, indexing, slicing

# ndarray = np.array(list변수)

ndarray.reshape(2, 4) # rray의 shap의 크기를 변경함, element의 개수는 동일하며 리턴을 해줘야 한다.

ndarray.flatten() # 다차원 array를 1차원 array로 변환

ndarray[0, 3] # indexing: list와 달리 이차원 배열에서 [0, 0] 표기법 제공

ndarray[::3, 0:4:2] # slicing: list와 달리 행과 열 부분을 나눠 slicing 가능 (step도 사용 가능)

Creation Function

통계적인 계산 등을 위해 넘파이 자체에서 간단하게 객체를 생성할 수 있는 메소드

- arange, zeros, ones, identity, eye, diag

np.arange(1, 30, 2) # list의 range와 같으며, step도 사용이 가능하다.
# 보통 reshape와 같이 사용되어 아래와 같은 꼴로 자주 사용한다.
np.arange(10).reshape(2, 5) # example

np.zeros(shape=(10, ), dtype=np.int8) # 값을 0으로 채운 ndarray 객체 반환

np.ones(shape=(10, ), dtype=np.int8) # 값을 1로 채운 ndarray 객체 반환

np.identity(n=3, dtype=np.int8) # 단위행렬(I행렬을 생성)

np.eye(n=3,m=5, k=2) # 단위행렬(I행렬)을 생성하지만, 시작 열(k)을 정할 수 있다.

np.diag(matrix)  # 대각행렬의 값만 추출하는 메소드

Random Sapmpling

데이터 분포에 따른 sampling으로 array를 생성할 수 있다

np.random.uniform(0, 1, 10) # 정규 분포에서 임의의 표본 추출 `.reshape(2, 5)` 사용
np.random.exponential(scale=2. size=10) # 지수 분포에서 임의의 표본 추출
# 그 외에도 다양한 분포에서 표본 추출 가능

Operation Function

넘파이에서는 기본적으로 다양한 수학적 연산을 지원한다 (mean, std, sqrt, exp, power, ...)

- ndarray.Operation함수(axis=기준인덱스)

★ axis: 모든 operation Function을 실행할 때 기준이 되는 dimension 축 (2차원 기준 0은 행방향, 1은 열방향)

- newaxis: 모든 새로운 축을 추가하고자 할 때 사용 (차원을 증가시킨다고 생각하면 이해가 수월할 듯) [ndarray[np.newaxis, :]]

Concatenate

Numpy객체끼리 합칠 때 사용하는 메소드인데, 자주 헷갈리는 부분이기에 기억해두면 좋다.

- vstack, hstack, concatenate

np.vstack((ndarray1, ndarray2)) # 벡터를 행방향으로 붙인다(수직)

np.hstack((ndarray1, ndarray2)) # 벡터를 열방향으로 붙인다(수평)

np.concatenate((ndarray1, ndarray2), axis=?) # 0은 행방향, 1은 열방향

Comparison

Numpy객체들을 비교할 때 사용하는 함수이다. numpy는 배열의 크기가 동일할 때, element간 비교의 결과를 Boolean Type으로 반환한다. 이를 'Element-wise Operation'이라고 한다. 

- all, any, logical_and, logical_or

# Array의 조건이 True인 것을 모두 찾으려면 All, 하나라도 True인 것을 찾으려면 Any
np.all(ndarray < 조건)
np.any(ndarray < 조건)

np.logical_and(ndarray<조건1, ndarray>조건2) # and조건의 condition
np.logical_or(ndarray<조건1, ndarray>조건2) # or조건의 condition

np.where(★)

조건에 해당하는 ndarray객체 값을 리턴하거나, 조건이 True, False인 경우를 구분해 값을 변화시킬 수 있다. 

- isnan, isfinite, argmin, argmax, argsort

np.where(ndarray < 조건, True값, False값) # 값을 변화시킬 수 있다.
np.where(ndarray < 조건) # 조건에 해당하는 ndarray 객체 리턴

np.isnan(ndarray) # Not a Number인지 확인
np.isfinite(ndarray) # is finite Number인지 확인

np.argmax(ndarray)
np.argmin(ndarray) # array내 최대값 또는 최소값의 index를 반환

# axis를 기준으로 반환도 가능하다
np.argmax(ndarray1, axis=0)
np.argmin(ndarray2, axis=1)

np.argsort() # ndarray를 정렬

Boolean Index & Fancy Index

넘파이에서 Index를 할 때 사용할 수 있는 특수한 방법이다. (해당 인덱싱 방법들은 생각보다 꽤 많이 사용되며, 특히 pandas에서도 많이 사용된다.)

# boolean index: 특정 조건에 따른 값을 배열 형태로 추출

test_array = np.array([1, 4, 0, 2, 3, 8], float) #index 반환
test_array[test_array>3] # 반환된 index의 값을 리턴


# fancy_index: numpy는 array를 index value로 사용해서 값을 추출할 수 있으며
# matrix 형태의 데이터에도 적용가능

a = np.array([[1, 4], [9, 16]], float)
b = np.array([0, 0, 1, 1, 0], int)
c = np.array([0, 1, 1, 1, 1], int)
a[b,c] ## array([ 1., 4., 16., 16., 4.])​

numpy data_i/o

넘파이에서 텍스트 데이터를 읽고 저장하거나, 넘파이 객체를 저장할 때 사용하는 메소드

# text type의 데이터를 읽고, 저장하는 기능
np.loadtxt("불러오려는파일명")
np.savetxt("저장파일명", 변수, fmt="%.2", delimiter=",") # format은 소수점 관련

# npy파일로 저장
np.save("저장파일명", arr = ndarray)

'IT 견문록 > 함수 및 코드 (디지털치매 대비)' 카테고리의 다른 글

Seaborn 멀티차트 사용법  (0) 2022.02.06
Seaborn API별 사용법  (0) 2022.02.06
Pytorch Trouble Shooting  (0) 2022.01.26
[git]Git 기본 명령어 정리  (0) 2022.01.21
Pandas 함수 정리  (0) 2022.01.21
Comments