numpy란 무엇인가?¶
Numpy는 C언어로 구현된 파이썬 라이브러리로써, 고성능의 수치계산을 위해 제작되었습니다. Numerical Python의 줄임말이기도 한 Numpy는 벡터 및 행렬 연산에 있어서 매우 편리한 기능을 제공합니다.
또한 이는 데이터분석을 할 때 사용되는 라이브러리인 pandas와 matplotlib의 기반으로 사용되기도 합니다.
numpy에서는 기본적으로 array라는 단위로 데이터를 관리하며 이에 대해 연산을 수행합니다. array는 말그대로 행렬이라는 개념으로 생각하시면 됩니다.
먼저 numpy를 사용하기 위해서는 아래와 같은 코드로 numpy를 import해야 합니다.
import Library¶
import numpy as np
array 정의 및 사용¶
data1=[1,2,3,4,5]
data2=[[1,2,3,4,5]]
print(type(data1))
print(data1)
print(type(data2))
print(data2)
#list를 이용하여 numpy array 정의
numpy_arr=np.array(data1)
numpy_arr2=np.array(data2)
print(type(numpy_arr))
print(numpy_arr)
print(type(numpy_arr2))
print(numpy_arr2)
shape¶
numpy에서는 해당 array의 크기를 알 수 있다.
shape 을 확인함으로써 몇개의 데이터가 있는지, 몇 차원으로 존재하는지 등을 확인할 수 있다.
data=[
[
[1,2],[8,3],[1,2],[8,3],[1,2],[8,3]
],
[
[2,2],[7,3],[1,2],[8,3],[1,2],[8,3]
],
[
[3,2],[6,3],[1,2],[8,3],[1,2],[8,3]
]
]
np_array=np.array(data)
np_array2=np.array([[1,2,3,4,5]])
np_array3=np.array([1,2,3,4,5])
print(np_array.shape)
print(np_array2.shape)
print(np_array3.shape)
위와 같이 shape를 통해 몇 차원인지 확인할 수 있다. 2차원 같은 (1,5)는 열과 행의 갯수임을 알 수 있다. \ 3차원의 경우에는 (x,y,z) x는 열의 갯수 y는 항목 내 리스트의 갯수 z는 리스트 내 컬럼의 갯수로 나뉜다.
numpy 자료형¶
numpy 또한 자료형을 갖는다. int, uint, float, complex, bool, string, object, unicode 등 다양한 자료형에 맞게 사용된다.\ 자료형 타입을 보고 싶은 경우 혹은 타입을 정의해서 선언하고자 할 경우 다음과 같이 사용한다.
np_arr=np.array([[1,2,3,4,5]],dtype='float')
print(np_arr.dtype)
print(np_arr)
np.zeros, np.ones, np.arange¶
numpy에서 빈 값 혹은 값을 생성하여 array를 만들고자 할 때 사용된다.
zeros : 인자로 받는 크기 만큼 모든 배열 요소가 0인 array 생성\ ones : 인자로 받는 크기 만큼 모든 배열 요소가 1인 array 생성\ arange : 지정한 크기 만큼의 '1차원' array를 생성
zeros=np.zeros(10,dtype='float')
zeros1=np.zeros((3,5),dtype='float')
zeros2=np.zeros((3,5,7),dtype='float')
print(zeros,'\n')
print(zeros1,'\n')
print(zeros2,'\n')
ones=np.ones(10,dtype='float')
ones1=np.ones((3,5),dtype='float')
ones2=np.ones((3,5,7),dtype='float')
print(ones,'\n')
print(ones1,'\n')
print(ones2,'\n')
arange=np.arange(10,dtype='float')
arange1=np.arange(3,5,dtype='float')
print(arange,'\n')
print(arange1,'\n')
Array 연산¶
arr1=np.array([[5,4,3],[3,2,1]],dtype='float')
arr2=np.array([[5,4,3],[5,4,3]],dtype='float')
print(arr1.shape)
print(arr2.shape)
print(arr1+arr2)
print(arr1*arr2)
print(arr1/arr2)
Array Indexing [중요]¶
numpy에서의 인덱싱은 python의 리스트 인덱싱과 동일하다.
arr1=np.array([
[5,9,10,17],
[4,8,11,16],
[2,7,12,15],
[1,6,13,18],
],dtype='float')
#이렇게 보면 편하다
#[행:열]
#[특정행,행:열]
#[행:열,행:열]
#4번째 요소 출력
print(arr1[3],'\n')
# 1번째 ~ 3번째 요소 꺼내기
print(arr1[0:3],'\n')
#3행의 모든 요소 꺼내기
print(arr1[2,:],'\n')
#3행에서 지정된 인덱싱부터 모든 요소 꺼내기
print(arr1[2,1:],'\n')
#모든 열의 2번째 요소 꺼내기
print(arr1[:,1],'\n')
#모든 열의 마지막 요소 꺼내기
print(arr1[:,-1],'\n')
#마지막 열을 제외한 모든 요소 꺼내기 라벨 꺼낼때 많이 사용
print(arr1[:,:-1],'\n')
numpy 계산 함수¶
numpy에서는 array에 관해 지원되는 함수가 다양하다.
#random 함수
#랜덤한 5,3 배열 크기를 갖는 array 생성
arr1=np.random.randn(5,3)
print(arr1)
print(arr1.shape)
#각 성분 절댓값으로 변환
np.abs(arr1)
#각 성분에 대해 제곱근을 구함
np.sqrt(arr1)
#각 성분의 제곱 계산하기
np.square(arr1)
#각 성분을 무리수 e의 지수로 삼은 값을 계산
np.exp(arr1)
#각 성분을 자연로그, 상용로그, 밑이 2인 로그를 씌운 값을 계산
np.log(arr1)
np.log2(arr1)
#각 성분의 부호 계산 (+ == 1 , - == -1 , 0 == 0)
np.sign(arr1)
#각 성분의 소수 첫 번째 자리에서 올림한 값 계산
np.ceil(arr1)
#각 성분의 소수 첫 번째 자리에서 내림한 값 계산
np.floor(arr1)
#각 성분이 NaN인 경우 True를 아닌 경우 False 반환
np.isnan(np.log(arr1))
#각 성분이 무한대인 경우 True 아닌 경우 False
np.isinf(arr1)
#각 성분에 대한 삼각함수 계산(cos,cosh,sin,sinh,tan,tanh)
np.cos(arr1)
np.tan(arr1)
두개의 array 에 적용되는 함수¶
arr1=np.random.randn(5,3)
arr2=np.random.randn(5,3)
#두 개의 array에 대해 동일한 위치의 성분끼리 연산 수행
#add, subtract, multiply,divede
np.add(arr1,arr2)
arr1=np.random.randn(5,3)
arr2=np.random.randn(5,3)
#두 개의 array에 대해 동일한 위치의 성분끼리 비교 수행
#maximum, minimum
np.maximum(arr1,arr2)
통계함수¶
#전체 성분 합 계산
arr1=np.random.randn(5,3)
np.sum(arr1)
#열 간의 합을 계산
arr1=np.random.randn(5,3)
np.sum(arr1,axis=1)
#행 간의 합을 계산
arr1=np.random.randn(5,3)
np.sum(arr1,axis=0)
#전체 성분의 평균을 계산
arr1=np.random.randn(5,3)
np.mean(arr1)
#행 간의 평균을 계산
arr1=np.random.randn(5,3)
np.mean(arr1,axis=0)
#전체 성분의 표준편차 분산,최소값,최대값 계산
#std, var, min, max
arr1=np.random.randn(5,3)
np.std(arr1)
np.var(arr1)
np.min(arr1)
np.max(arr1)
#전체 성분의 최솟값, 최댓값이 위치한 인덱스를 반환(argmin,argmax)
arr1=np.random.randn(5,3)
np.argmax(arr1)
np.argmin(arr1)