Search

Python 12. NumPy의 기초 (1)

Created at
2019/03/01
Updated at
2021/01/20
Tags
Keywords
NumPy
3 more properties

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기⟫ 수업자료