다들 아시다시피 파이썬에서 행렬관련 계산을 빠르게 해주는 패키지죠
모르던 시절에 넘피라고 읽었었는데 넘파이였… 아직도 습관적으로 튀어나오는
항상 쓰던 패키지지만 정리겸 복습겸 한번 남겨봐요
Numpy는 ndarray 라는 넘파이 전용 리스트를 사용하는데 쉽게 행렬이라 생각하시면 됩니다. Tensorflow 나 pytorch, keras 등의 프레임웍도 전부 이 ndarray를 사용하니 익혀두면 매우 유용합니다.
한가지 타입의 정보만 저장이 가능하지만 연산속도에서 엄청난 이점이!
반복문을 행렬로 변화시키는걸 Vectorization 기법이라 하죠.
ndarray의 앞의 nd 는 n 차원을 의미… 그냥 그렇다구요
편한 점이라면 파이썬 리스트에서 사용하던 : 를 이용한 슬라이싱도 가능하고 브로드캐스팅이란 기능덕에 차원이 맞지 않는 행렬끼리도 연산이 가능해요. 물론 아얘 이상한거끼린 안되고 (3,5) 과 (2,3,5) 이런 행렬은 앞에행렬을 2번 반복해서 (2,3,5)로 만들어 연산해 줍니다. 좋은 기능이긴 하나 의도하지 않은 계산이 될수도 있으니 주의를…
일단 불러옵시다
> import numpy as np
그럼 시작해볼게요
> li = [1,2,3,4,5,6]
> arr = np.array(li) # ndarray로 변환
> display(arr)
array([1, 2, 3, 4, 5, 6])
> np.arange(1,7)
array([1, 2, 3, 4, 5, 6])
> np.zeros((2,3))
array([[0., 0.],
[0., 0.],
[0., 0.]])
> np.full((2,3), 55) # 자매품 0대신 다른값 넣는 함수
array([[55, 55, 55],
[55, 55, 55]])
> np.eye(2) # 단위행렬(주대각성분이 1이고 나머진 0) 생성 함수
array([[1., 0.],
0., 1.])
연산에 사용하는 함수들이죠. 대부분 함수들은 전체단위로 계산을하며 행별 혹은 열별로 사용하고 싶을때는 axis 변수를 이용해 주면 됩니다
np.add(), np.substract(), np.mulyiply(), np.divide()
사칙연산입니다. 각 해당하는 위치의 원소끼리 연산하죠.
np.dot()
내적을 연산하는 것이라지만, 그냥 행렬곱이라 생각하는게편합니다.
연산을 위해선 형상을 맞추는게 중요!
np.sum(), np.prod()
원소의 합, 혹은 곱을 반환합니다
np.max(), np.min()
최대와 최소값 반환하는 함수입니다
np.argmax(), np.argmin()
최대와 최소값을 가진 위치를 반환하는 함수에요
np.argmax(data) 가 2라면 2번째 위치에 최대값이 존재한단 뜻이죠.
> data = np.arange(1,7)
> data.shape
(6,)
> data = np.arange(1,7)
> data.reshape((2,3)) # 2,3 행렬로 변경
> # np.reshape(data, (2,3)) 이렇게도 가능
array([[1, 2, 3],
[4, 5, 6]])
> data.reshape(-1) # 쭉 필때
array([1, 2, 3, 4, 5, 6])
> data.reshape((3,-1)) # 3행으로(열은 알아서)
array([[1, 2],
[3, 4],
[5, 6]])
> data = np.arange(1,7)
> data = data.reshape((2,3,1))
> print(data.shape)
> data = data.transpose((0,2,1)) # 두번째와 세번째의 순서 변경
> print(data.shape)
(2, 3, 1)
(2, 1, 3)
np.random.seed(42)
np.random.randn()
표준 정규분포에 따른 n 개의 무작위 숫자 생성
> np.random.randn(5) # 5개의 숫자 생성
array([ 0.69406812, -1.15425813, 0.98864607, 0.73682549, -0.57181785])
> np.random.randint(0, 10, 5) # 0 이상 10 미만의 숫자 5개 랜덤 생성
array([7, 0, 7, 7, 2])
여러가지 더있지만 일단 자주 쓰던것으로 뽑아봤습니다 당연히 넘파이엔 엄청나게 많은기능이 있지만 실제로 사용하는 것은 조금 적은편… Tensorflow 나 pytorch 의 함수를 사용하게 되므로 ㅠㅠ 중요한게 생각나면 또 업데이트 할께요 저도 까먹으면 가끔씩 보려고 정리한거라 ㅠ