본문 바로가기
IT/파이썬(Python)

파이썬 Numpy 배열 모양 바꾸기(reshape, concatenate, split)

by 깡타의 컴맹인생 2023. 4. 2.
반응형

파이썬 numpy 배열 모양 바꾸기

목차
1. reshape 함수
2. concatenate 함수
3. split 함수

1. reshape 함수

numpy.reshape(a, newshape, order='C')

a : array_like
newshape : int or tuple of ints
order : {‘C’, ‘F’, ‘A’}, optional
1
2
3
4
5
6
7
8
9
10
11
import numpy as np
 
= np.arange(8)
 
print('a.shape =', a.shape, '\n')
print('a =', a, '\n')
 
= a.reshape((24))
 
print('b.shape =', b.shape, '\n')
print('b =', b)
cs
a.shape = (8,) 

a = [0 1 2 3 4 5 6 7] 

b.shape = (2, 4) 

b = [[0 1 2 3]
 [4 5 6 7]]

reshape는 기존 배열을 새로운 행과 열의 구조를 가진 배열로 재배치하는 함수다. a는 1행 8열로 생성한 배열이다. 하지만 reshape 함수를 사용하여 (2, 4) 2행 4열의 구조로 모양을 변경했다. 출력 결과를 비교해 보면 바뀐 것을 확인할 수 있다. reshape 함수에서 원하는 배열의 구조는 튜플 형태로 입력하거나 단일 정수로 입력한다.


2. concatenate 함수

numpy.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind")

a1, a2, … : sequence of array_like
axis : int, optional
out : ndarray, optional
dtype : str or dtype
casting : {‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’}, optional
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np
 
= np.array([01])
= np.array([34])
= np.concatenate([x, y])
print('x \n', x, '\n')
print('y \n', y, '\n')
print('z \n', z, '\n')
 
x1 = np.arange(4).reshape((22))
y1 = np.arange(4).reshape((22))
z1 = np.concatenate([x1, y1], axis = 0)
print('x1 \n', x1, '\n')
print('y1 \n', y1, '\n')
print('z1 \n', z1, '\n')
 
z2 = np.concatenate([x1, y1], axis = 1)
print('z2 \n', z2, '\n')
cs
x 
 [0 1] 

y 
 [3 4] 

z 
 [0 1 3 4] 

x1 
 [[0 1]
 [2 3]] 

y1 
 [[0 1]
 [2 3]] 

z1 
 [[0 1]
 [2 3]
 [0 1]
 [2 3]] 

z2 
 [[0 1 0 1]
 [2 3 2 3]]

concatenate는 axis 축을 기준으로 2개 이상의 배열을 합칠 때 사용하는 함수다. axis를 활용하여 행 방향으로 합칠 것인지, 열 방향으로 합칠 것인지 결정할 수 있다. 다만 합칠 array가 모두 단일 행으로 생성된 경우에는 열 방향으로 합치는 것이 불가능하다. 이 경우에는 행 방향으로만 합칠 수 있다. z1과 z2를 살펴보면 axis를 0과 1로 했을 때 각각의 배열이 합쳐지는 방향이 달라지는 것을 확인할 수 있다.


3. split 함수

numpy.split(ary, indices_or_sections, axis=0)

ary : ndarray
indices_or_sections : int or 1-D array
axis : int, optional
1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
 
= np.arange(16).reshape(44)
 
b, c = np.split(a, [3], axis = 0)
 
b1, c1 = np.split(a, [3], axis = 1)
 
print('a =', a, '\n')
print('b =', b, '\n')
print('c =', c, '\n')
print('b1 =', b1, '\n')
print('c1 =', c1, '\n')
cs
a = [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]] 

b = [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]] 

c = [[12 13 14 15]] 

b1 = [[ 0  1  2]
 [ 4  5  6]
 [ 8  9 10]
 [12 13 14]] 

c1 = [[ 3]
 [ 7]
 [11]
 [15]]

split 함수는 axis 축을 기준으로 분할할 때 사용하는 함수다. 분할 대상이 되는 배열과 원하는 axis 축, 분할 방향을 입력하면 2개의 배열로 나뉘어 결과가 출력된다. b와 c, b1과 c1을 살펴보면 axis =0, axis = 1 인지에 따라서 수직으로 분할하고 수평으로 분할하는 차이가 생긴 것을 확인할 수 있다.

반응형