[파이썬] 넘파이: array, size, shape, dtype, save, load, zeros, ones, full, arange, linspace, reshape, ndim, argmax
NUMPY BASICS
NumPy는 다차원 배열을 처리할 수 있는 선형대수학(Linear Algebra) 라이브러리다.
먼저 넘파이 활용을 위해 numpy를 임포트하자.
또한 numpy를 as문을 이용하여 np로 축약해 편하게 사용하도록 해보자.
import numpy as np
# 이제 넘파이 함수를 np로 불러올수 있다.
리스트를 하나 만들어보자
a = [1,2,3,4,5]
그리고 이 리스트를 array함수를 사용해 1차원 배열로 만들수 있다.
in:
b = np.array(a)
b
out:
array([1, 2, 3, 4, 5])
넘파이는 리스트와 달리 mean 함수를 통해 바로 평균을 구할수 있다.
in:
b.mean()
out:
3.0
size 함수로 배열의 개수를 띄워보자
in:
b.size
out:
5
shape 함수로 배열의 모양을 확인할수 있다.
in:
b.shape
out:
(5,)
# 1차원 배열은 축이 하나(x , ), 2차원은 둘 (x , y), 3차원은 셋이다 (x , y , z ).
배열이 저장하고 있는 데이터의 타입을 확인하자
in:
b.dtype
out:
dtype('int32')
넘파이를 통해 2차원 배열을 만들어보자
먼저 두개의 리스트를 담은 리스트를 만들어보자
in:
C = [[1,2],[3,4]]
C
out:
[[1, 2], [3, 4]]
in:
D = np.array(C)
D
out:
array([[1, 2],
[3, 4]])
shape 함수로 형태를 확인해보자
in:
D.shape
out:
(2, 2)
# 축이 2개인 2차원 배열로 확인된다.
배열을 안전하게 save 하고 load 할수있다.
save함수로 파일명과 배열이름을 입력해 저장하자.
np.save('my_array',D)
load 함수로 파일명을 입력해 불러오자.
Y = np.load('my_array.npy')
zeros함수를 통해 0으로 이루어진 배열을 만들수있다.
in:
np.zeros((3,4))
out:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
ones 함수를 이용하여 1로만 이루어진 배열을 만들수 있다.
in:
np.ones((3,5))
out:
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
full 함수를 사용하여 원하는 숫자로만 이루어진 배열을 만들수 있다.
in:
np.full((2,3),6)
out:
array([[6, 6, 6],
[6, 6, 6]])
arange함수로 정수의 배열을 만들어 보자
in:
np.arange(4,13)
out:
array([ 4, 5, 6, 7, 8, 9, 10, 11, 12])
# np.arange(start,stop,step)
linspace를 통해 정수 말고 실수로 이루어진 배열을 만들자.
0부터 25까지 10개의 실수
in:
np.linspace(0,25,10, endpoint = False)
out:
array([ 0. , 2.5, 5. , 7.5, 10. , 12.5, 15. , 17.5, 20. , 22.5])
# 마지막 수를 포함하지 않고 싶으면 endpoint = False를 추가해보자
reshape을 사용하여 배열 형태를 변경할수 있으며 다른 차원으로도 변경할수있다.
in:
X = np.arange(20).reshape(4,5)
X
out:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
# 1차원 배열을 reshape함수를 이용하여 2차원으로 만들었다.
ndim 함수를 이용해 몇차원인지 간단히 확인할수있다.
in:
X.ndim
out:
2
random 함수를 이용해 랜덤값으로 채워진 배열을 만들어보자
in:
np.random.random((3,4))
out:
array([[0.14808446, 0.08956689, 0.30670853, 0.52472014],
[0.27804222, 0.2747622 , 0.5298554 , 0.34083237],
[0.87864027, 0.96870361, 0.75608205, 0.53223492]])
# random 함수를 이용하면 무작위 실수가 배치된다.
randint 함수를 이용해 시작과 끝을 주는 정수로 채워진 배열을 만들자.
in:
np.random.randint(1,6,(3,4))
out:
array([[3, 5, 3, 4],
[1, 1, 5, 1],
[3, 1, 1, 4]])
normal 함수로 정규분포를 만족하는 값으로 배열을 채울수 있다.
in:
np.random.normal(170,10,(2,3))
out:
array([[179.40418995, 170.33329547, 156.525817 ],
[162.00098505, 175.5943731 , 184.05560531]])
# 평균값이 170, 표준편차가 10인 2행 3열 으로 된 배열을 만들었다.
넘파이 기본함수를 알아보자
- 최대값 : 배열.max( )
- 최소값 : 배열.min( )
- 전체합 : 배열.sum( )
- 전체평균: 배열.mean( )
- 표준편차: 배열.std( )
- 중앙값 : np.median(배열)
각 행별로 최대값을 구해보자.
in:
X.max(axis=1)
out:
array([91, 62, 62, 82])
# 각 열의 최대값은 axis = 0으로 입력하면된다.
배열속 최대값 데이터의 인덱스를 가져오려고 할때
in:
X.argmax()
out:
0
# 최소값은 argmin 함수를 사용하면 된다.
각 행별로 최소값의 인덱스 구하려면
in:
X.argmin(axis=1)
out:
array([3, 3, 0, 4], dtype=int64)
# axis가 1이면 행에서 0이면 열에서 구한다.