240626 TIL #435 Numpy - 1

김춘복·2024년 6월 25일
0

TIL : Today I Learned

목록 보기
435/494

Today I Learned

오늘은 파이썬의 계산용 패키지인 Numpy에 대해 공부해보았다.


Numpy

Numerical Python. 파이썬의 고성능 과학 계산용 패키지

  • Matrix와 Vector 같은 Array 연산의 표준

  • 일반 List에 비해 메모리 효율적이고 속도가 빠르다.

  • C로 구현되어있어 파이썬과 다르게 dynamic typing을 지원하지 않아 성능의 이점이 있다.

  • 반복문 없이 데이터 배열에 대한 처리를 지원하고, 선형 대수와 관련된 다양한 기능을 제공한다.

  • import numpy as np로 호출. 별칭은 주로 np를 사용한다.

  • jupyter notebook에서 함수에 shift+tap을 누르면 해당 함수의 docstring을 알려준다!

ndarray

  • array 생성방법
    np.array([시퀀스자료형], dtype)
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를 선언하면 자동으로 형변환이 된다.

  • dtype은 array의 데이터의 타입, shape는 array의 dimmension 구성(크기, 형태)을 말한다.
    ndim은 dimmension의 차원, size는 data의 총 개수를 말한다.
    nbytes는 array의 메모리 크기를 반환한다.(원소당 메모리 x 총 원소 개수)
# 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에 따른 array의 이름
Rank이름예시형태 (Shape)
0Scalarnp.array(42)()
1Vectornp.array([1, 2, 3])(3,)
2Matrixnp.array([[1, 2], [3, 4]])(2, 2)
33D Tensornp.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])(2, 2, 2)
nnD Tensor다양한 n차원 배열예: (2, 2, 2, 2)

Handling Shape

  • reshape : array의 shape 크기를 변경한다. 단, element의 개수는 동일하다.
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])

indexing & slicing

  • 리스트와 다르게 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
  • list와 다르게 행과 열 부분을 나눠서 slicing이 가능하다.
    matrix의 부분집합을 추출할 때 유용하다.
    :만쓰면 전체를 의미한다. 보통 시작:끝(끝은 미포함)
    ::처럼 2개를 쓰면 2개씩 세며(0,2,4,8,..) slicing 한다.
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]]
  • index에서 -1은 제일 마지막부분부터 시작한다.

Data I/O

  • np.loadtxt("./sample.txt") : 파일 호출

  • .astype(int) : int로 변환

  • np.savetxt('int_data.csv', array, delimiter=",") : csv로 저장

profile
꾸준히 성장하기 위해 매일 log를 남깁니다!

0개의 댓글