NumPy 소개
•
Numpy는 Pandas와 함께 데이터사이언스에서 수치 배열 데이터를 다루는데 필수적으로 사용되는 핵심 패키지이다.
•
데이터사이언스에서 데이터는 보통 배열로 나타내는데 numpy를 사용해 vector/matrix/고차원 배열의 연산을 효율적이고 빠르게 할 수 있다. <br> (내부적으로 C로 구현되어 있기 때문에 python 반복문을 사용하는 것에 비해 연산이 빠르다.)
다룰 내용
먼저 여기에서는 array를 만들고 수정하는 기본적인 방법들을 다뤄보자.
1.
배열 만들기: Make, array
2.
reshape
3.
index
4.
데이터 수정
5.
특수 행렬 만들기: zeros, ones, eye, like, empty
<!-- more -->
0. 설치하기 & 불러오기
•
설치하기: $ pip3 install numpy
•
불러올때는 아래와 같이 alias로 'np'를 사용하는 것이 컨벤션
import numpy as np
Python
복사
1. 배열 만들기
1.1 배열(ndarray)
•
ndarray: NumPy의 array class (alias: array)
•
중요 속성
◦
ndarray.ndim : array의 차원 수
◦
ndarray.shape : array 각 차원의 사이즈
1.2 array 만들기
(1) 1차원 배열 (vector, 행벡터)
array = np.array([0,1,2,3,4,5])
# array = np.array(range(6)) # 같은 결과가 나옴
print(type(array))
print(array)
Plain Text
복사
<class 'numpy.ndarray'>
[0 1 2 3 4 5]
Plain Text
복사
(2) 2차원 배열 (matrix)
# 열벡터 (n*1 matrix)
array = np.array([[0],[1],[2]])
print(array)
Plain Text
복사
[[0]
[1]
[2]]
Plain Text
복사
# `n*m` matrix
array = np.array([[1, 2, 3],
[4, 5, 6]])
print(array)
print("array의 ndim(차원 수):", array.ndim)
print("array의 shape:", array.shape)
Plain Text
복사
[[1 2 3]
[4 5 6]]
array의 차원 수: 2
array의 shape: (2, 3)
Plain Text
복사
(3) 3차원 배열 (n*m*o matrix)
array = np.array([[[0,1,2,3],
[4,5,6,7],
[8,9,10,11]],
[[0,1,2,3],
[4,5,100,7],
[8,9,10,11]]])
print(array)
print("array의 ndim(차원 수):", array.ndim)
print("array의 shape:", array.shape) # 바깥에서 안(상위에서 하위로)으로 모양을 나타낸다고 생각하면 편함
Plain Text
복사
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 0 1 2 3]
[ 4 5 100 7]
[ 8 9 10 11]]]
array의 ndim(차원 수): 3
array의 shape: (2, 3, 4)
Plain Text
복사
2. reshape
•
행렬의 모양을 바꿀수 있다.
na = np.array([1, 2, 3, 4, 5, 6, 7, 8])
na
Plain Text
복사
array([1, 2, 3, 4, 5, 6, 7, 8])
Plain Text
복사
rna = na.reshape(2, 4) # 아래보다는 이렇게 쓰는게 좀 더 편한 방법
rna
Plain Text
복사
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
Plain Text
복사
rna = np.reshape(na, (4, 2)) # np의 함수 reshape을 사용
rna
Plain Text
복사
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
Plain Text
복사
# 전치행렬 (.T는 속성)
rna.T
Plain Text
복사
array([[1, 3, 5, 7],
[2, 4, 6, 8]])
Plain Text
복사
3. index
•
행렬 데이터를 수정하거나, 가져오거나, 자를 때 사용
•
행렬의 특정 위치 데이터 값 가져오기
•
행렬 자르기
array
Plain Text
복사
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[ 0, 1, 2, 3],
[ 4, 5, 100, 7],
[ 8, 9, 10, 11]]])
Plain Text
복사
print(array[1][1][2]) # 바깥차원부터 indexing
print(array[1,1,2]) # 이렇게 줄여서 써도 OK
Plain Text
복사
100
100
Plain Text
복사
# indexing 이용한 slicing
result = array[1:,1:,2:]
print(result)
print(result.ndim, result.shape) # 3차원이라는 점!
Plain Text
복사
[[[100 7]
[ 10 11]]]
3 (1, 2, 2)
Plain Text
복사
print(result[0])
result[0].ndim
Plain Text
복사
[[100 7]
[ 10 11]]
2
Plain Text
복사
4. 데이터 수정
ls = np.array(range(5))
ls
Plain Text
복사
array([0, 1, 2, 3, 4])
Plain Text
복사
ls[2] = 0
ls
Plain Text
복사
array([0, 1, 0, 3, 4])
Plain Text
복사
ls[3:] = 0
ls
Plain Text
복사
array([0, 1, 0, 0, 0])
Plain Text
복사
5. 특수 행렬 만들기
5.1 zeros
•
행렬을 만들고 0을 채움
•
dtype으로 데이터 타입 설정 가능 (default는 float)
z = np.zeros(5)
z
Plain Text
복사
array([0., 0., 0., 0., 0.])
Plain Text
복사
## data type을 parameter로 넣어주기
zz = np.zeros((2 ,3), dtype=int)
zz
Plain Text
복사
array([[0, 0, 0],
[0, 0, 0]])
Plain Text
복사
zz.ndim
Plain Text
복사
2
Plain Text
복사
# 고차원도 만들 수 있음 (모양을 상상할 수는 없지만)
z5 = np.zeros((2, 3, 2, 3, 2), dtype=int)
z5.ndim, z5.shape
Plain Text
복사
(5, (2, 3, 2, 3, 2))
Plain Text
복사
5.2 ones
•
행렬을 만들고 1을 채움
•
dtype으로 데이터 타입 설정 가능 (default는 float)
one = np.ones((2, 3), dtype=int)
one
Plain Text
복사
array([[1, 1, 1],
[1, 1, 1]])
Plain Text
복사
5.3 eye
•
단위 행렬 데이터를 만듦
print(np.eye(5))
print(np.identity(5))
Plain Text
복사
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
Plain Text
복사
5.4 like
•
행렬 안에 있는 모든 데이터를 0이나 1로 바꿀수 있음
•
np.zeros_like(matrix): 0으로 바꾸기
•
np.ones_like(matrix): 1로 바꾸기
z = np.zeros(5)
z
Plain Text
복사
array([0., 0., 0., 0., 0.])
Plain Text
복사
ls = np.ones_like(z)
ls
Plain Text
복사
array([1., 1., 1., 1., 1.])
Plain Text
복사
np.zeros_like(one)
Plain Text
복사
array([[0, 0, 0],
[0, 0, 0]])
Plain Text
복사
5.5 empty
•
빈 행렬을 만듦
•
실제로는 빈데이터가 아니라 dummy 데이터가 들어감
•
보통 empty보다는 zeros나 ones를 많이 사용
np.empty((5, 3))
Plain Text
복사
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
Plain Text
복사
참고자료
•
•
패스트캠퍼스, ⟪데이터사이언스스쿨 8기⟫ 수업자료