Python

[numpy] PY - NumPy Array Reshaping (배열 재구성) ★ - 배열 모양 변경

3823
목차
  1. 배열 재구성 (= 배열 모양 변경)
  2. 배열 재구성 가능성
  3. 재구성된 배열 성질: view
  4. 미지의 차원
  5. 배열 평탄화 (Flattening the arrays)
  6. 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

 



분류 제목
set Python - set.isdisjoint() 메서드 - 두 Set의 공통요소 유무 체크. (= isdisj…
set Python - set.issubset() 메서드 - 서브 Set인지 체크. (= issubset메서드 = …
set Python - set.issuperset() 메서드 - 수퍼 Set인지 체크. (= issuperset메서…
set Python - set.pop() 메서드 ★ - Set에서 요소 랜덤 제거 후, 제거된 요소 반환. (= p…
set Python - set.remove() 메서드 ★ - Set에서 지정요소 제거. (= remove메서드 = …
set Python - set.symmetric_difference() 메서드 - Set의 공통요소 제외한 결합 S…
set Python - set.symmetric_difference_update() 메서드 - Set의 공통요소 제…
set Python - set.union() 메서드 ★ - 중복 시 한번만 포함해 Set 결합. (=셋 합치기 u…
set Python - set.update() 메서드 - 두 Set을 결합해 기존 set을 수정. (= update…
file Python - File Method - 파일메서드 종류
file Python - close() 메서드 ★★★ - 열린 파일 닫기. (= close메서드 = 클로즈 메서드)
file Python - detach() 메서드 △ - 버퍼에서 분리된 원시 스트림 반환. (= detach메서드 =…
file Python - fileno() 메서드 - 스트림의 파일 설명자를 숫자로 반환. (= fileno메서드 = …
file Python - flush() 메서드 ★ - 버퍼 비우기/정리. (= flush메서드 = 플러시메서드)
file Python - isatty() 메서드 - 파일 스트림이 상호대화형인지 체크. (= isatty메서드)
17/32
목록
 홈  PC버전 로그인 일본어
그누앞단언어
그누뒷단언어
그외코딩언어
그누보드
제작의뢰
Q&A
커뮤니티
웹유틸
회원센터
홈짱닷컴 PC버전 로그인