[Python] numpy 라이브러리의 기본적인 유용한 함수들
Numpy Basic¶
import numpy as np
data type¶
array의 dtype을 본다.
arr = np.array([[1., 2, 3], [1, 2, 3]])
numpy의 data 타입은 하나라도 실수가 포함되어 있으면 실수로 인식한다
arr.dtype
.astype()을 사용해서 datatype을 강제 형변환 가능
arr = arr.astype(np.int32)
arr
array를 생성할 때, dtype= 을 지정해주어서 만들 수도 있다.
arr = np.array([[1., 2, 3], [1, 2, 3]], dtype=np.uint8)
arr.dtype
len(arr.shape) 를 통해서 차원의 갯수를 확인 할 수 있지만, 아래와 같이 shape과 ndim을 통해 차원 수를 확인할 수 있다.
len(arr.shape)
arr.ndim
arr.shape
size 확인 : 사이즈는 array에 존재하는 원소의 개수이다.
arr.size
dtype 확인
arr.dtype
Reshape¶
arr.shape
Reshape을 통하여 행렬의 형태를 변형할 수 있다.(resize와는 다른 것이다.)
arr = arr.reshape([1, 6])
arr.shape
arr = np.array([[1, 2, 3], [1, 2, 3]])
arr.reshape([6]).shape # 1차원, 벡터로 변환
Reshape, -1 활용, 차원과 사이즈가 클 때, shape를 어떻게 나누어야 할 지 모를 때 -1을 통해서 남는 형태를 변형시킬 수 있다
arr = arr.reshape(-1)
arr.shape
arr = arr.reshape(-1, 3)
arr.shape
random array 생성
arr = np.random.randn(8, 8)
arr.shape
arr
arr = arr.reshape([32, 2])
arr.shape
3차원 이상으로 늘리기. 원소의 개수가 reshape의 형태와 맞는다면 차원의 개수가 크게 늘어나도 가능하다.
arr = arr.reshape(-1, 2, 1, 1, 1, 1)
arr.shape
Ravel¶
ravel은 일자로 array를 펴준다고 생각하면 되는 함수이다. 즉 원소들을 벡터로 나열한다
arr.shape
arr = arr.ravel()
arr.shape
arr의 차원을 1로 바꿔줌
나중에 배울 layer를 flatten 할 때 같은 기능이라 생각하면 됨
arr.reshape(-1) 와 같음
arr.ravel() == arr.reshape(-1)
np.expand_dims()¶
안의 값은 유지하되 차원 수를 늘리고 싶을 때가 있을 수 있다. 이럴 때 사용하는 것이 expand_dims이다. 즉, 뒤(또는 앞)에다가 1을 추가한다고 생각하면 된다.
arr.shape
arr = np.expand_dims(arr, -1)
arr.shape
arr = arr.ravel()
arr.shape
앞에다가 추가할 것이면 0, 뒤에다가 추가할 것이면 -1,(indexing과 동일한 구조)
arr = np.expand_dims(np.expand_dims(arr, -1), 0)
arr.shape
zeros & ones¶
0으로 채워진 numpy array를 만들 수 있음 1로 채워진 numpy array 또한 가능
zeros = np.zeros([3, 3])
zeros
zeros = np.zeros(1)
zeros
ones = np.ones([10, 5])
ones
ones 이상의 수로 이루어진 array를 만들기 위해서는 scalar 곱셈을 해주면 가능하다
ones * 5
arange¶
arange함수를 통해서 연속적인 수로 이루어진 array를 만들 수 있다.
arr = np.arange(5)
arr
slicing을 이용하여 원하는 범위로 이루어진 array또한 만들 수 있다.
arr = np.arange(4, 9)
arr
arr = np.arange(10, 20)
arr
arr = np.arange(9).reshape(3, 3)
arr
Index¶
list의 인덱싱과 동일, 하지만 행과 열차원에서 모두 가능 [행 index, 열 index]
nums = [1, 2, 3, 4, 5]
nums[2:]
nums = [1, 2, 3, 4, [1, 2, 3]]
nums
nums[4]
arr[1][2]
arr[1, 2]
arr[1] # 2행
Slicing¶
slicing 또한 index와 마찬가지
arr
arr[1:]
arr[1:, 1:]
arr
Boolean Indexing¶
boolean indexing이란 논리적으로 True 값만 뽑아내는 것이다.
data = np.random.randn(3, 3)
data
data <= 0
이를 활용하여서 특정 데이터만 가공을 할 수 있다.
data[data <= 0] = 1
data
Broadcast¶
tensorflow나 pytorch로 계산하면 broadcast의 개념도 잘 이해해야 한다.
broadcast는 연산 하려는 서로 다른 두개의 행렬의 shape가 같지 않고, 한쪽의 차원이라도 같거나 또는 값의 갯수가 한 개 일 때
이를 여러 복사를 하여 단순 연산을 진행하는 것이다.
arr = np.arange(9).reshape(3, 3)
arr
arr + 3
arr * 3
arr
벡터로 broadcasting을 진행할 수도 있다.
arr + np.array([1, 2, 3])
Math Function¶
arr + 10
arr * 5
arr + arr
np.add(arr, 1)
arr + 1
np.multiply(arr, 3)
arr = np.random.randint(2, size=27).reshape(3, 3, 3)
arr_2 = np.random.randint(2, size=9).reshape(3, 3)
arr.shape, arr_2.shape
arr + arr_2
arr * arr_2
기초통계 함수¶
np.sum(arr) # array의 원소들의 합을 구하기
np.sum(arr + arr_2)
arr + arr_2
np.max(arr + arr_2) # array에 존재하는 원소 중 가장 큰 값
np.min(arr + arr_2) # array에 존재하는 원소 중 가장 작은 값
np.max(arr + arr_2, -1)
arr + arr_2
np.sum(arr + arr_2, axis=-1)
np.mean(arr) # array에 존재하는 원소들의 산술평균
arr = np.array([1, 6, 3, 7, 3, 2, 9, 0, 2])
arr
np.argmax(arr)
# 이는 가장 큰 수치를 갖고있는 원소의 index를 나타낸다,
# prob이 가장 높은 수를 찾기위한 딥러닝의 분류에서 많이 쓰인다
np.argmin(arr)
# 이는 가장 작은 수치를 갖고있는 원소의 index를 나타낸다,
arr = np.array([3, 5, 6, 6, 3, 3, 1])
np.unique(arr) # array에 존재하는 원소들을 중복없이 출력한다.