넘파이 기초
numpy
numpy
: 수학 계산을 위한 Python 라이브러리
numpy
의 주요 기능:
- 여러 가지 수학 함수
- 배열(array)
배열: 여러 개의 값을 순서대로 묶어서 처리하는 자료 구조(list
와 비슷)
numpy 임포트
as
는 약칭numpy
를np
라고 쓸 수 있게 됨- 대부분 자료들이 이렇게 하고 있으니까 똑같이 하면 다른 자료를 참고하실 때 도움
import numpy as np
1차원 배열 만들기
- 데이터가 한 줄로 있어서 1차원 배열
- 수학에서는 벡터
- 파이썬의 리스트와 비슷
x = [1, 2, 'hello'] # 리스트
numpy
배열은 모든 값의 자료형이 같음.[1, 'hello']
처럼 섞어 쓸 수 없음- 길이도 고정
- 계산 속도를 높이기 위함
np.array
를 이용해 리스트를 배열로 변환
a = np.array([1, 2, 3])
a
array([1, 2, 3])
배열의 모양
.ndim
은 배열의 차원을 나타냄. 1차원 배열이므로 1
a.ndim
1
.shape
은 배열의 모양을 나타냄. 3개의 값이 있으므로 (3, )
3
이 아니라 (3, )
으로 출력되는 이유는 튜플(tuple)형이기 때문. (2차원 배열인 경우는 (3, 2)
, 3차원 배열인 경우는 (3, 4, 1)
등의 형태가 됨)
a.shape # 모양
(3,)
dtype
- 배열에는 자료형이 한 가지만 들어간다, 배열의 자료형은 dtype으로 확인
- int는 정수, -2, -1, 0, 1, 2, 3 이렇게 소수점 없는 것
- float은 실수
- 8, 16, 32, 64는 몇 비트인가, 얼마나 큰 수까지 표현할 수 있는가
- 2진수 자리 수
- 자리수가 클 수록 더 큰 수, 실수의 경우에는 더 자세히
- 계산 속도가 늦어지는 단점, 필요에 따라 결정
a.dtype # int: 정수(소수점 이하 X), 32 bit
dtype('int32')
자료형은 기본적으로 자동 결정되지만 배열을 만들 때 dtype으로 지정할 수도 있음
a = np.array([1, 2, 3], dtype='float32')
a
array([1., 2., 3.], dtype=float32)
a.dtype
dtype('float32')
이미 만들어진 배열에 astype 메소드를 이용하면 자료형을 변환할 수 있음
a = a.astype('int32')
a.dtype
dtype('int32')
배열 + 수
- numpy 배열의 장점은 그냥 수처럼 계산이 가능하다는 것
- 배열에 수 하나를 더하거나 곱하거나 하면 배열의 모든 값에 더해지거나 곱해진다
- 빼기, 나누기 등등도 마찬가지
a
array([1., 2., 3.], dtype=float32)
a + 1
array([2, 3, 4])
a * 10
array([10, 20, 30])
배열 + 배열
- 배열끼리 계산할 수도 있는데, 이때는 원소들끼리 짝을 지어 계산
a + a
array([2., 4., 6.], dtype=float32)
a * a
array([1., 4., 9.], dtype=float32)
길이가 안 맞으면 에러
b = np.array([5, 6, 7, 8])
a + b
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-15-bd58363a63fc> in <module> ----> 1 a + b ValueError: operands could not be broadcast together with shapes (3,) (4,)
배열 인덱싱
배열의 인덱싱은 리스트와 같음
a[0]
1.0
a[1]
2.0
a[-1]
3.0
2차원 배열 만들기
- 1차원 배열은 데이터가 한 줄로 서있는 것
- 2차원 배열은 데이터가 가로방향, 세로방향 두 방향으로 있는 것
- 1차원에서는 데이터가 어디있는지 숫자 하나로 나타낼 수
- 2차원은 숫자가 2개가 필요함, 그래서 2차원
b = np.array(
[
[1, 5, 9],
[2, 6, 8],
[3, 4, 7]
]
)
b
array([[1, 5, 9], [2, 6, 8], [3, 4, 7]])
b.shape
(3, 3)
b.ndim
2
저장
np.save('a.npy', a)
np.savetxt('b.csv', b)
불러오기
np.load('a.npy')
array([1, 2, 3])
np.loadtxt('b.csv', dtype='int32')
array([[1, 5, 9], [2, 6, 8], [3, 4, 7]])