[Python] NumPy 배열 변환

참조


배열 전치 및 축 변경

import numpy as np

# 1차원  
a1 = np.array([1,2,3,4,5])
# 2차원
a2 = np.array([[1,2,3], [4,5,6], [7,8,9]])
# 3차원
a3 = np.array([ [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ],
                [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ],
                [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] ])

print(a2)
print(a2.T) # 배열 전치 

print(a3)
print(a3.T)

print(a2)
print(a2.swapaxes(1, 0))

print(a3)
print(a3.swapaxes(0, 1))
print(a3.swapaxes(1, 2))
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 4 7]
 [2 5 8]
 [3 6 9]]
[[[1 2 3]
  [4 5 6]
  [7 8 9]]

 [[1 2 3]
  [4 5 6]
  [7 8 9]]

 [[1 2 3]
  [4 5 6]
  [7 8 9]]]
[[[1 1 1]
  [4 4 4]
  [7 7 7]]

 [[2 2 2]
  [5 5 5]
  [8 8 8]]

 [[3 3 3]
  [6 6 6]
  [9 9 9]]]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 4 7]
 [2 5 8]
 [3 6 9]]
[[[1 2 3]
  [4 5 6]
  [7 8 9]]

 [[1 2 3]
  [4 5 6]
  [7 8 9]]

 [[1 2 3]
  [4 5 6]
  [7 8 9]]]
[[[1 2 3]
  [1 2 3]
  [1 2 3]]

 [[4 5 6]
  [4 5 6]
  [4 5 6]]

 [[7 8 9]
  [7 8 9]
  [7 8 9]]]
[[[1 4 7]
  [2 5 8]
  [3 6 9]]

 [[1 4 7]
  [2 5 8]
  [3 6 9]]

 [[1 4 7]
  [2 5 8]
  [3 6 9]]]

배열 재구조화

  • reshape() : 배열의 형상을 변경
import numpy as np

n1 = np.arange(1, 10)
print(n1)
print(n1.reshape(3, 3))
[1 2 3 4 5 6 7 8 9]
[[1 2 3] 
 [4 5 6] 
 [7 8 9]]
  • newaxis() : 새로운 축 추가
import numpy as np

n1 = np.arange(1, 10)

print(n1)
print(n1[np.newaxis, :5]) # row 추가
print(n1[:5, np.newaxis]) # column 추가
[1 2 3 4 5 6 7 8 9]
[[1 2 3 4 5]]
[[1]
 [2]
 [3]
 [4]
 [5]] 

배열 크기 변경

  • 배열 모양만 변경
import numpy as np

n2 = np.random.randint(0, 10, (2, 5))
print(n2)
n2.resize((5, 2))
print(n2)
[[8 8 7 2 7]
 [9 5 7 9 6]]
[[8 8]
 [7 2]
 [7 9]
 [5 7]
 [9 6]]
  • 배열 크기 증가
  • 남은 공간은 0으로 채워짐
import numpy as np

n2 = np.random.randint(0, 10, (2, 5))
print(n2)
n2.resize((5, 5))
print(n2)
[[0 4 8 4 9]
 [0 0 2 1 2]]
[[0 4 8 4 9]
 [0 0 2 1 2]
 [0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]]
  • 배열 크기 감소
  • 포함되지 않은 값은 삭제됨
import numpy as np

n2 = np.random.randint(0, 10, (2, 5))
print(n2)
n2.resize((3, 3))
print(n2)
[[6 5 9 7 1]
 [4 4 6 3 7]]
[[6 5 9]
 [7 1 4]
 [4 6 3]]

배열 추가

  • append() : 배열의 끝에 값 추가
import numpy as np

a2 = np.arange(1, 10).reshape(3, 3)
print(a2)
b2 = np.arange(10, 19).reshape(3, 3)
print(b2)

c2 = np.append(a2, b2)
print(c2)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[10 11 12]
 [13 14 15]
 [16 17 18]]

[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18]
  • axis를 0으로 지정
  • shape[0]을 제외한 나머지 shape은 같아야 함
import numpy as np

a2 = np.arange(1, 10).reshape(3, 3)
print(a2)
b2 = np.arange(10, 19).reshape(3, 3)
print(b2)

c2 = np.append(a2, b2, axis = 0)
print(c2)
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]
 [13 14 
 [16 17 18]]15]

  • axis를 1로 지정
  • shape[1]을 제외한 나머지 shape은 같아야 함
import numpy as np

a2 = np.arange(1, 10).reshape(3, 3)
print(a2)
b2 = np.arange(10, 19).reshape(3, 3)
print(b2)

c2 = np.append(a2, b2, axis = 1)
print(c2)
[[ 1  2  3 10 11 12]
 [ 4  5  6 13 14 15]
 [ 7  8  9 16 17 18]]

배열 연결

  • concatenate() : 튜플이나 배열의 리스트를 인수로 사용해 배열 연결
import numpy as np

a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])

np.concatenate([a1, b1])

print(np.concatenate([a1, b1]))

c1 = np.array([7, 8, 9])
np.concatenate([a1, b1, c1])

print(np.concatenate([a1, b1, c1]))

a2 = np.array([[1, 2, 3], 
               [4, 5, 6]])
np.concatenate([a2, a2])

print(np.concatenate([a2, a2]))

a2 = np.array([[1, 2, 3], 
               [4, 5, 6]])
np.concatenate([a2, a2])

print(np.concatenate([a2, a2], axis=1))
[1 3 5 2 4 6]
[1 3 5 2 4 6 7 8 9]
[[1 2 3]
 [4 5 6]
 [1 2 3]
 [4 5 6]]
[[1 2 3 1 2 3]
 [4 5 6 4 5 6]]
  • vstack() : 수직 스택(vertical stack), 1차원으로 연결
import numpy as np

a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])
a2 = np.array([[1, 2, 3], 
               [4, 5, 6]])

print(np.vstack([a2, a2]))
[[1 2 3]
 [4 5 6]
 [1 2 3]
 [4 5 6]]
  • hstack() : 수평 스택(horizontal stack), 2차원으로 연결
import numpy as np

a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])
a2 = np.array([[1, 2, 3], 
               [4, 5, 6]])

print(np.hstack([a2, a2]))
[[1 2 3 1 2 3]
 [4 5 6 4 5 6]]
  • dstack() : 깊이 스택(depth stack), 3차원으로 연결
import numpy as np

a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])
a2 = np.array([[1, 2, 3], 
               [4, 5, 6]])

print(np.dstack([a2, a2]))
[[[1 1]
  [2 2]
  [3 3]]

 [[4 4]
  [5 5]
  [6 6]]]
  • stack() : 새로운 차원으로 연결
import numpy as np

a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])
a2 = np.array([[1, 2, 3], 
               [4, 5, 6]])

print(np.stack([a2, a2]))
[[[1 2 3]
  [4 5 6]]

 [[1 2 3]
  [4 5 6]]]

배열 분할

  • split() : 배열 분할
import numpy as np

a1 = np.arange(0, 10)
print(a1)
b1, c1 = np.split(a1, [5])
print(b1, c1)
c2, c2, d1, e1, f1 = np.split(a1, [2, 4, 6, 8])
print(b1, c1, d1, e1, f1)
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4] [5 6 7 8 9]
[0 1 2 3 4] [5 6 7 8 9] [4 5] [6 7] [8 9]
  • vsplit() : 수직 분할, 1차원으로 분할
import numpy as np

a2 = np.arange(1, 10).reshape(3, 3)
print(a2)
b2, c2 = np.vsplit(a2, [2])
print(b2, c2)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 2 3]
 [4 5 6]] [[7 8 9]]
  • hsplit() : 수평 분할, 2차원으로 분할
import numpy as np

a2 = np.arange(1, 10).reshape(3, 3)
print(a2)
b2, c2 = np.hsplit(a2, [2])
print(b2, c2)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 2]
 [4 5]
 [7 8]] [[3]
 [6]
 [9]]
  • dsplit() : 깊이 분할, 3차원으로 분할
import numpy as np

a3 = np.arange(1, 28).reshape(3, 3, 3)
print(a3)
b3, c3 = np.dsplit(a3, [2])
print(b3, c3)
[[[ 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]]]
[[[ 1  2]
  [ 4  5]
  [ 7  8]]

 [[10 11]
  [13 14]
  [16 17]]

 [[19 20]
  [22 23]
  [25 26]]] [[[ 3]
  [ 6]
  [ 9]]

 [[12]
  [15]
  [18]]

 [[21]
  [24]
  [27]]]
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY