[Numpy] shape변경하기 np.ravel, np.flatten, np.reshape

Surf in Data·2022년 4월 3일
0

numpy

목록 보기
3/6
post-thumbnail

ravel, np.ravel

  • 다차원배열을 1차원으로 변경
  • 'order' 파라미터
    • 'C' - row 우선 변경
    • 'F - column 우선 변경
x = np.arange(9).reshape(3, 3)
print(x)
[[0 1 2]
 [3 4 5]
 [6 7 8]]
np.ravel(x)
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
temp = x.ravel()
print(temp)
[0 1 2 3 4 5 6 7 8]
  • ravel 과 flatten의 차이점:
    다차원의 ndarray 배열을 a라고 가정했을때 ravel함수를 이용하여 일차원으로 배열을 변경한후 일차원 데이터의 원소를 변경하면 다차원 배열인 a의 해당 원소도 변경된다.
print(x)

temp[0] = 100
print(temp)
print(x)
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[100   1   2   3   4   5   6   7   8]
[[100   1   2]
 [  3   4   5]
 [  6   7   8]]

ravel 함수는 default값으로 행을 기준으로 1차원 데이터로 변경해주지만 order파라미터 값의 변경을 통해 열기준으로 변경도 가능하다.

np.ravel(x, order = 'F') 
array([100,   3,   6,   1,   4,   7,   2,   5,   8])

flatten

  • 다차원 배열을 1차원으로 변경
  • ravel과의 차이점: copy를 생성하여 변경함(즉 원본 데이터가 아닌 복사본을 반환)
  • 'order' 파라미터
    • 'C' - row 우선 변경
    • 'F - column 우선 변경
y = np.arange(9).reshape(3, 3)
print(y)
[[0 1 2]
 [3 4 5]
 [6 7 8]]
temp = y.flatten()
print(temp)
[0 1 2 3 4 5 6 7 8]
temp[0] = 100
print(temp)
print(y) #ravel 함수와 달리 변경되지 않음을 볼 수 있다.
[100   1   2   3   4   5   6   7   8]
[[0 1 2]
 [3 4 5]
 [6 7 8]]

reshape 함수

  • array의 shape을 다른 차원으로 변경
  • 주의할점은 reshape한 후의 결과의 전체 원소 개수와 이전 개수가 같아야 가능
  • 사용 예) 이미지 데이터 벡터화 - 이미지는 기본적으로 2차원 혹은 3차원(RGB)이나, 트레이닝을 위해 1차원으로 변경하여 사용 됨
x = np.arange(9)
print(x)
print(x.shape)
print(x.ndim)
[0 1 2 3 4 5 6 7 8]
(9,)
1
y = x.reshape(3, 3)      #나는 열이 6개인 행렬을 만들고싶어 앞에꺼는 너가 계산해줘라는뜻
print(y)
print(y.shape) #3 x 3행렬
print(y.ndim) # 2차원
[[0 1 2]
 [3 4 5]
 [6 7 8]]
(3, 3)
2
y = x.reshape(-1, 3)      #나는 열이 3개인 행렬을 만들고싶어 앞에꺼는 너가 계산해줘라는뜻
print(y)
[[0 1 2]
 [3 4 5]
 [6 7 8]]
profile
study blog

0개의 댓글