오답노트
[Numpy] 배열의 형태 변경 본문
reshape
배열의 shape을 변경할 수 있다. 하지만 shape 을 변경할 때, 원소의 개수는 같아야한다.
예를 들어 1차원 배열에 4개의 원소가 있다면, 원소가 4개인 shape을 지정해야한다. 이 경우 2x2 행렬로 reshape 할 수 있다.
또 reshape 에서 shape의 값 중 하나를 -1로 지정할 수 있고 -1은 자동으로 계산된다. 단, 지정되지 않은 한 개의 차원에서만 사용 가능하다.
#reshape
arr = np.arange(12)
print(arr,arr.ndim) # [ 0 1 2 3 4 5 6 7 8 9 10 11] 1
# 기존 배열의 원소의 개수와 reshape 원소의 개수가 같아야함
arr = arr.reshape([3,4])
print(arr, arr.ndim)
''''''''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]] 2
'''''''
# -1로 인자를 주면 자동으로 -1이 원소의 수에 맞게 변경됨
# 단 지정 되지않은 한 개의 차원만 사용 가능하다.
arr = arr.reshape([3,-1])
print(arr, arr.ndim)
''''''''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]] 2
'''''''
arr = arr.reshape([2,3,2])
print(arr,arr.ndim)
'''''''
[[[ 0 1]
[ 2 3]
[ 4 5]]
[[ 6 7]
[ 8 9]
[10 11]]] 3
'''''''
arr = arr.reshape([2,2,1,3])
print(arr,arr.ndim)
'''''''
[[[[ 0 1 2]]
[[ 3 4 5]]]
[[[ 6 7 8]]
[[ 9 10 11]]]] 4
'''''''
resize
resize 함수는 reshape과 용도는 같지만 reshape은 결과를 반환하고, resize는 대상이 된 배열을 바꾼다.
arr = np.arange(12)
print(arr) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
#resize
arr.resize([3,4])
print(arr)
'''''''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
'''''''
expand_dim
차원을 늘리는 함수다. axis 옵션을 통해 차원을 늘릴 방향을 선택할 수 있다.
#expand_dim
arr = np.array([1,2])
print(arr,arr.shape) # [1 2] (2,)
arr = np.expand_dims(arr,axis=0)
print(arr,arr.shape) # [[1 2]] (1, 2)
arr = np.expand_dims(arr,axis=1)
print(arr,arr.shape) # [[[1 2]]] (1, 1, 2)
squeeze
차원을 줄이는 함수다. aixs 옵션을 통해 줄일 차원을 선택할 수 있다.
단, 줄일려는 aixs에 원소가 존재한다면 오류가 발생한다.
#squeeze
arr = np.array([[1,2]])
print(arr,arr.shape,arr.ndim) # [[1 2]] (1, 2) 2
arr = np.squeeze(arr, axis=0)
print(arr,arr.shape,arr.ndim) # [1 2] (2,) 1
arr = np.array([[[1],[2],[3]]])
print(arr,arr.shape,arr.ndim)
'''''''
[[[1]
[2]
[3]]] (1, 3, 1) 3
'''''''
arr = np.squeeze(arr, axis=0)
print(arr,arr.shape,arr.ndim)
'''''''
[[1]
[2]
[3]] (3, 1) 2
'''''''
arr = np.array([[[1,2,3]]])
print(arr,arr.shape,arr.ndim) # [[[1 2 3]]] (1, 1, 3) 3
arr = np.squeeze(arr, 1)
print(arr,arr.shape,arr.ndim) # [[1 2 3]] (1, 3) 2
arr = np.array([[[1],[2],[3]]])
print(arr,arr.shape,arr.ndim)
'''''''
[[[1]
[2]
[3]]] (1, 3, 1) 3
'''''''
#axis 옵션 미설정지 무조건 1차원 배열로 감소
arr = np.squeeze(arr)
print(arr,arr.shape,arr.ndim) # [1 2 3] (3,) 1
'Python > Numpy' 카테고리의 다른 글
[Numpy] 배열의 원소 추가/삭제 (0) | 2022.07.14 |
---|---|
[Numpy] 배열의 전치행렬 (0) | 2022.07.14 |
[Numpy] 배열의 정렬 (0) | 2022.07.11 |
[Numpy] 배열의 내적 연산 장점 (0) | 2022.07.11 |
[Numpy] 브로드캐스팅(Broadcasting) (0) | 2022.07.11 |