[Numpy] shape변경하기 np.ravel, np.flatten, np.reshape
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]]
Author And Source
이 문제에 관하여([Numpy] shape변경하기 np.ravel, np.flatten, np.reshape), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@skkumin/Numpy-shape변경하기-np.ravel-np.flatten-np.reshape저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)