데이터 분석 (numpy)

김지윤·2021년 9월 5일
0

numpy

넘파이(Numpy)는 Python에서 벡터, 행렬 등 수치 연산을 수행하는 선형대수(Linear algebra) 라이브러리이다.

install 방법 :

pip install numpy (최신방법버전으로 설치됨)
// 원하는 버전으로 설치할 경우 아래 command 실행
pip install numpy==1.16.4

// import 방법
import numpy as np

numpy는 axis의 개념을 이해할 필요가 있다.

1차원 Array의 경우 axis0 => 1 -> 2 -> 1로 흐르는 Flow이므로 행이라고 표현한다.

print([1, 2, 1])

2차원 Array의 경우 axis0 => [1, 0, 0] -> [0, 1, 2] 이므로 행을 표현하고,
axis1 => 1 -> 0 -> 0 -> 0 -> 1 -> 2 순서로 들어가기때문에 열을 표현한다.

print([1, 0, 0], [0, 1, 2])

3차원 Array의 경우 axis0 => [[1, 2], [3,4]] -> [[5, 6], [7,8]] 높이를 표현하게 되고,
axis1 => [1, 2] -> [3, 4] 또는 [5, 6] -> [7, 8] 행을 표현하게 되며,
axis2 => 1 -> 2 또는 3-> 4 또는 5 -> 6 또는 7 -> 8로 표현한다.

a = np.arange(24).reshape(2, 3, 4)
print(a)

np.zeros( ), np.ones( ), np.empty( )를 사용하여 데이터 초기화
파라미터의 Shape의 경우 Tuple형태의 Union 타입을 넘겨서 생성해야 함

np.zeros(shape) : 0으로 구성된 N차원 배열 생성
np.ones(shape) : 1로 구성된 N차원 배열 생성
np.empty(shape) : 초기화되지 않은 N차원 배열 생성

np.arange() 와 np.linspace()를 이용하여 연속적인 데이터 생성

np.arange(): N 만큼 차이나는 숫자 생성
np.linspace(): N 등분한 숫자 생성

numpy에서 수치연산은 기본적으로 element wise 연산
숫자가 각각의 요소에 연산이 적용됨

2차원 배열을 행렬이라고 생각했을 때 행렬의 여러가지 곱셈 존재

(*) : 각각의 원소끼리 곱셈 (Elementwise product, Hadamard product)
@ : 행렬 곱셈 (Matrix product)
.dot() : 행렬 내적 (dot product)

수치연산 진행할 때 각각의 .dtype이 다르면,
타입이 큰쪽(int < float < complex)으로 자동으로 변경

.sum( ), .min( ), .max( ), .argmax( ), .cumsum( )와 같은 연산을 진행 가능

sum( ): 모든 요소의 합
min( ): 모든 요소 중 최소값
max( ): 모든 요소 중 최대값
argmax( ): 모든 요소 중 최대값의 인덱스
cumsum( ): 모든 요소의 누적합

.sum( ), .min( ), .max( ), .cumsum( )과 같은 연산에 axis 값을 입력하면,
축을 기준으로도 연산 가능
axis = 0은 shape에서 첫번째부터 순서대로 해당됨

수학적인 연산이 너무 많기 때문에 .exp( ), .sqrt( )만 예시로 실습 진행
필요한 수치 연산은 available-ufuncs를 확인!

Numpy.ndarray
np.ndarray의 shape를 다양한 방법으로 변경 가능
.ravel( )은 1차원으로 변경
.reshape( )은 지정한 차원으로 변경
.T는 전치(Transpose) 변환
하지만 데이터 원본은 변경하지 않고 복사하여 연산한 결과를 return

np.vstack() 와 np.hstack()를 통해 데이터를 합칠 수 있음
np.vstack(): axis=0 기준으로 쌓음
np.hstack(): axis=1 기준으로 쌓음

np.hsplit( )을 통해 숫자1개가 들어갈 경우, X개로 등분
np.hsplit( )을 통해 리스트로 넣을 경우, axis=1 기준 인덱스로 데이터를 분할

profile
I wanna be a best developer during life time

0개의 댓글