Python 넘파이 배열 ndarray 상하좌우 반전

파이썬에서 NumPy 배열인 ndarray를 위아래로 반전을 시키거나, 오른쪽 왼쪽을 반전 시키는 방법을 알아보겠습니다.

 ● 위아래 반전 : np.flipud()

 ● 좌우 반전 : np.fliplr()

 ● 상하좌우 전체 반전 : np.flip()

 

상하 반전 np.flipud()

배열 ndarray를 위아래로 반전하고 싶은 경우에는 np.filpud()를 사용합니다.

import numpy as np

a_2d = np.arange(6).reshape(2, 3)
print(a_2d)
# [[0 1 2]
#  [3 4 5]]

a_2d_flipud = np.flipud(a_2d)
print(a_2d_flipud)
# [[3 4 5]
#  [0 1 2]]

print(np.shares_memory(a_2d, a_2d_flipud))
# True

 

원본 값은 변경하고 싶지 않은 경우에는 copy()를 사용합니다.

import numpy as np

a_2d = np.arange(6).reshape(2, 3)

a_2d_flipud_copy = np.flipud(a_2d).copy()
print(a_2d_flipud_copy)
# [[3 4 5]
#  [0 1 2]]

print(np.shares_memory(a_2d, a_2d_flipud_copy))
# False

 

좌우 반전 np.fliplr()

배열 ndarray를  좌우로 반전하고 싶은 경우에는 np.fliplr()를 사용합니다.

np.filpud()처럼 원본 값은 변경하고 싶지 않고 결과값을 따로 저장하고 싶은 경우에는 copy()를 사용합니다.

import numpy as np

a_2d = np.arange(6).reshape(2, 3)
print(a_2d)
# [[0 1 2]
#  [3 4 5]]

a_2d_fliplr = np.fliplr(a_2d)
print(a_2d_fliplr)
# [[2 1 0]
#  [5 4 3]]

print(np.shares_memory(a_2d, a_2d_fliplr))
# True

 

상하좌우 반전 np.flip()

배열 ndarray를 상하좌우를 포함해 임의의 축으로 반전하고 싶은 경우는 np.flip()를 사용합니다.

기본적인 사용 방법을 먼저 보겠습니다.

import numpy as np

a_2d = np.arange(6).reshape(2, 3)
print(a_2d)
# [[0 1 2]
#  [3 4 5]]

a_2d_flip = np.flip(a_2d)
print(a_2d_flip)
# [[5 4 3]
#  [2 1 0]]

print(np.shares_memory(a_2d, a_2d_flip))
# True

 

상하좌우로 배열 값이 반전되었습니다.

axis를 지정해 상하 또는 좌우로 반전을 시킬 수 있습니다.

 ● axis=0 : flipud()

 ● axis=1 : fliplr()

 

import numpy as np

a_3d = np.arange(24).reshape(2, 3, 4)

print(np.flip(a_3d, 0))
# [[[12 13 14 15]
#   [16 17 18 19]
#   [20 21 22 23]]
# 
#  [[ 0  1  2  3]
#   [ 4  5  6  7]
#   [ 8  9 10 11]]]
import numpy as np

a_3d = np.arange(24).reshape(2, 3, 4)

print(np.flip(a_3d, 1))
# [[[ 8  9 10 11]
#   [ 4  5  6  7]
#   [ 0  1  2  3]]
# 
#  [[20 21 22 23]
#   [16 17 18 19]
#   [12 13 14 15]]]

 

반전시키고 싶은 축을 여러개 설정할 수도 있습니다.

import numpy as np

a_3d = np.arange(24).reshape(2, 3, 4)

print(np.flip(a_3d, (1, 2)))
# [[[11 10  9  8]
#   [ 7  6  5  4]
#   [ 3  2  1  0]]
# 
#  [[23 22 21 20]
#   [19 18 17 16]
#   [15 14 13 12]]]
<br>
print(a_3d[:, ::-1, ::-1])
# [[[11 10  9  8]
#   [ 7  6  5  4]
#   [ 3  2  1  0]]
# 
#  [[23 22 21 20]
#   [19 18 17 16]
#   [15 14 13 12]]]

 

슬라이스를 이용해서 배열 값을 반전시키는 것도 가능합니다.

하지만 슬라이스에 설정해야 하는 값이 조금 복잡해지는 경우도 있기 때문에 단순히 위아래는 반전하거나 오른쪽 왼쪽을 반전 시키는 경우에는 준비되어 있는 메서드를 사용하는 것도 좋을거 같습니다.

댓글