오늘은 파이썬의 계산용 패키지인 Numpy에 대해 공부해보았다.
Numerical Python. 파이썬의 고성능 과학 계산용 패키지
Matrix와 Vector 같은 Array 연산의 표준
일반 List에 비해 메모리 효율적이고 속도가 빠르다.
C로 구현되어있어 파이썬과 다르게 dynamic typing을 지원하지 않아 성능의 이점이 있다.
반복문 없이 데이터 배열에 대한 처리를 지원하고, 선형 대수와 관련된 다양한 기능을 제공한다.
import numpy as np
로 호출. 별칭은 주로 np를 사용한다.
jupyter notebook에서 함수에 shift+tap을 누르면 해당 함수의 docstring을 알려준다!
import numpy as np
a = [1,2,3,4,5]
b = [5,4,3,2,1]
a = np.array(a, int)
print(a) # [1 2 3 4 5]
test_array = np.array([1,4,5,"8"], float)
print(test_array) # [1. 4. 5. 8.]
print(type(test_array[3])) # <class 'numpy.float64'>
print(test_array.dtype) # float64
print(test_array.shape) # (4,)
위의 방법으로 만든 것이 ndarray 객체.
여기에는 하나의 type만 배열에 들어간다.
numpy에서 타입은 C언어의 타입과 거의 compatible하다.
"5"같은 string type이나 2같이 int type으로 넣어도 dtype에 float를 선언하면 자동으로 형변환이 된다.
# 3차원 배열 생성
array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
# 배열의 형태를 확인
print(array_3d.shape) # (2, 2, 2)
print(array_3d.ndim) # 3
print(array_3d.size) # 8
Rank | 이름 | 예시 | 형태 (Shape) |
---|---|---|---|
0 | Scalar | np.array(42) | () |
1 | Vector | np.array([1, 2, 3]) | (3,) |
2 | Matrix | np.array([[1, 2], [3, 4]]) | (2, 2) |
3 | 3D Tensor | np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) | (2, 2, 2) |
n | nD Tensor | 다양한 n차원 배열 | 예: (2, 2, 2, 2) |
test_matrix = [[1,2,3,4],[5,6,7,8]]
np.array(test_matrix,).shape # (2, 4)
test_reshape = np.array(test_matrix).reshape(8,)
print(test_reshape) # [1 2 3 4 5 6 7 8]
test_reshape.shape # (8,)
np.array(test_matrix).reshape(-1,2).shape # (4,2)
위의 예시 마지막 코드처럼 .reshape(-1,2)에서 앞에껄 -1로 하면 뒤의 숫자 차원에 맞춰서 자동으로 계산해 reshape를 해준다.
flatten : 다차원 array를 1차원 array로 변환해준다.
np.array(test_matrix).flatten()
# array([1, 2, 3, 4, 5, 6, 7, 8])
리스트와 다르게 2차원 배열에서 [0][0]뿐만 아니라 [0,0] 표기법을 제공한다.
matrix의 경우 앞은 row, 뒤는 column을 의미한다.
a = np.array([[1,2,3],[4.5,5,6]], int)
print(a[0,0]) # 1
a[0,0] = 10
print(a[0][0]) # 10
print(a[:,1:]) # 전체 행의 1열부터 [[2 3], [5 6]]
print(a[1,1:3]) # 1행의 1~3열(3열은 미포함)[5]
print(a[1:2]) # 1~2헹 [[4 5 6]]
np.loadtxt("./sample.txt") : 파일 호출
.astype(int) : int로 변환
np.savetxt('int_data.csv', array, delimiter=",") : csv로 저장