데이터사이언스 기록기📚

[Numpy] ndarray 데이터 형태 바꾸기(ravel, flatten, reshape) 본문

Data/Data

[Numpy] ndarray 데이터 형태 바꾸기(ravel, flatten, reshape)

syunze 2022. 6. 14. 14:24

1. 다차원 배열을 1차원으로 변경

 1) ravel

   - np.ravel(x), x.ravel()은 동일하게 출력

x = np.arange(15).reshape(3,5)
print(x)
# [[ 0  1  2  3  4]
# [ 5  6  7  8  9]
# [10 11 12 13 14]]

# 값 동일
np.ravel(x)
x.ravel()
# array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

   - order 파라미터 : 'C'는 row 우선변경, 'F'는 column 우선변경

  • 'C'가 기본 옵션
np.ravel(x)
# array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

np.ravel(x, order = 'F')
# array([ 0,  5, 10,  1,  6, 11,  2,  7, 12,  3,  8, 13,  4,  9, 14])

 - 값을 복사하지 않고 유지

temp = np.ravel(x)
print(temp)
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

# 값을 복사하지 않고 유지
temp[0] = 100
print(temp)
# [100   1   2   3   4   5   6   7   8   9  10  11  12  13  14]
print(x)
# [[100   1   2   3   4]
# [  5   6   7   8   9]
# [ 10  11  12  13  14]]

 

2) flatten

   - order 파라미터 : 'C'는 row 우선변경, 'F'는 column 우선변경

y = np.arange(15).reshape(3,5)
print(y)
# [[ 0  1  2  3  4]
# [ 5  6  7  8  9]
# [10 11 12 13 14]]

# order 파라미터 기본값
t2 = y.flatten()
print(t2)
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

# order 파라미터 F
t2 = y.flatten(order = 'F')
print(t2)
# [ 0  5 10  1  6 11  2  7 12  3  8 13  4  9 14]

   - 내부에 copy본을 만들어서 변경(copy본의 값을 바꾸면 원래 값은 영향 없음)

t2[0] = 100

print(t2)
# [100   1   2   3   4   5   6   7   8   9  10  11  12  13  14]

print(y)
# [[ 0  1  2  3  4]
# [ 5  6  7  8  9]
# [10 11 12 13 14]]

2. array의 shape을 다른 차원으로 변경

1) reshape

  - 행 * 열 값이 원래의 원소 크기와 같아야 함(여기서는 6*6=36으로 가능)

  - 곱이 맞지 않으면 오류로 반환 불가

  - '-1'값을 주면 유추해서 숫자를 넣어줌

x = np.arange(36)
print(x)
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35]

# 행*열 값이 원래의 원소 크기와 같아야 함
# 곱이 맞지 않으면 반환 불가
x.reshape(6,6)
# array([[ 0,  1,  2,  3,  4,  5],
#       [ 6,  7,  8,  9, 10, 11],
#       [12, 13, 14, 15, 16, 17],
#       [18, 19, 20, 21, 22, 23],
#       [24, 25, 26, 27, 28, 29],
#      [30, 31, 32, 33, 34, 35]])

# -1값을 주면 값을 유추해서 넣어주는 것, 위의 코드와 결과 동일
x.reshape(6,-1)
# array([[ 0,  1,  2,  3,  4,  5],
#       [ 6,  7,  8,  9, 10, 11],
#       [12, 13, 14, 15, 16, 17],
#       [18, 19, 20, 21, 22, 23],
#       [24, 25, 26, 27, 28, 29],
#      [30, 31, 32, 33, 34, 35]])
728x90
Comments