목차
배열 재구성 (= 배열 모양 변경)
배열 재구성 가능성
재구성된 배열 성질: view
미지의 차원
배열 평탄화 (Flattening the arrays)
NumPy 중고급 수준의 (배열모양・요소재정렬) 함수
배열 재구성 (= 배열 모양 변경)
배열 모양 (= 각 차원의 요소 개수) 변경 의미.
즉,
차원 추가/제거하거나 각 차원의 요소 개수 변경.
[예제1] - 1차원 12개 요소 → 2차원 (4, 3) 모양
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(4, 3)
print(newarr)
결과값:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[예제2] - 1차원 12개 요소 → 3차원 (2, 3, 3) 모양
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(2, 3, 2)
print(newarr)
결과값:
[[[ 1 2]
[ 3 4]
[ 5 6]]
[[ 7 8]
[ 9 10]
[11 12]]]
배열 재구성 가능성
모양 변경에 필요한 요소가 두 모양에서 모두 동일하면 가능.
(예)
가능 경우 : 8개 요소 1D 배열 → 2행 2D 배열의 4개 요소.
불가 경우 : 8개 요소 1D 배열 → 3행 2D 배열의 3개 요소.
※ 왜냐면, 동일 차원 배열 경우, 각 요소 개수는 동일해야 함.
[예제1] - 배열 재구성 가능 경우.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, 4)
print(newarr)
결과값:
[[1 2 3 4]
[5 6 7 8]]
[예제2] - 배열 재구성 불가능 경우.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(3, 3)
print(newarr)
결과값:
ValueError: cannot reshape array of size 8 into shape (3,3)
재구성된 배열 성질: view
배열 객체의 base 속성 : 배열이 copy인지 view인지 확인 가능.
※ 배열이 copy이면 None 반환. (즉, 데이터 소유 O)
※ 배열이 view이면 원본 배열 반환. (즉, 데이터 소유 X)
[예제]
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(arr.reshape(2, 4).base )
결과값: [1 2 3 4 5 6 7 8]
미지의 차원
특정 차원의 개수 모를 때 -1 지정.
이 경우, NumPy가 자동으로 계산.
※ 오직 1개의 차원에만 지정 가능.
[예제1] 3차원의 요소 개수를 NumPy가 자동 계산.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, 2, -1)
print(newarr)
결과값:
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
[예제2] -1을 2개 이상 지정 시 에러 발생.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, -1, -1 )
print(newarr)
결과값: ValueError: can only specify one unknown dimension
배열 평탄화 (Flattening the arrays)
다차원 배열을 1차원 배열로 변환 .
※ 배열 객체의 reshape(-1 ) 메서드 이용.
[예제] 2차원 배열 → 1차원 배열
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr = arr.reshape(-1)
print(newarr)
결과값: [1 2 3 4 5 6]
PS.
NumPy 중고급 수준의 (배열모양・요소재정렬) 함수
※ 배열 모양 변경 함수 : flatten, ravel
※ 배열 요소 재정렬 함수 : rot90, flip, fliplr, flipud
주소 복사
랜덤 이동