오답노트

[Numpy] 배열의 형태 변경 본문

Python/Numpy

[Numpy] 배열의 형태 변경

권멋져 2022. 7. 14. 17:49

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