본문 바로가기
  • Hello_
Python/Numpy

[Python] np.concatenate() - 넘파이 어레이 합치기

by LDwDL 2022. 9. 12.
728x90
반응형

오늘은 넘파이 어레이들을 특정 축 기준으로 합치는 방법에 대해 소개하고자 한다.

 

np.concatenate()

해당 함수는 특정 어레이들을 합칠 때 유용하게 사용된다. 이를 알아보기 위해 사이즈 (3,3)인 어레이와 (1,3)인 어레이를 합쳐보도록 하자.

 

[입력값 생성]

import numpy as np

array_1 = np.random.randint(0,10,size = [3,3])
array_2 = np.random.randint(0,10,size = [1,3])

print(array_1)
"""
[[0 5 5]
 [4 3 7]
 [6 8 4]]
"""

print(array_2)
# [[4 6 5]]

 

[concat]

np.concatenate([array_1,array_2])
"""
array([[0, 5, 5],
       [4, 3, 7],
       [6, 8, 4],
       [4, 6, 5]])
"""

np.concatenate([array_1,array_2]).shape
# (4, 3)

다음과 같이 np.concatenate를 사용하면 array_1과 array_2가 첫 번째 축을 기준으로 결합이 된다. 따라서 출력된 결과의 사이즈는 (4,3)이다.

 

여기서 주의해야할 점이 있다. np.concatenate()의 인자에는 axis를 받는데 이는 0이 default로 해당 축을 제외한 나머지 축의 사이즈가 다르다면 오류가 발생한다.

 

[오류 발생]

array_3 = np.random.randint(0,10,size = [3,3])
array_4 = np.random.randint(0,10,size = [3,1])

print(array_3)
"""
[[9 2 8]
 [3 2 7]
 [2 2 4]]
"""

print(array_4)
"""
[[0]
 [6]
 [5]]
"""

np.concatenate([array_3,array_4])
"""
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
----> 1 np.concatenate([array_3,array_4])

File <__array_function__ internals>:5, in concatenate(*args, **kwargs)

ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 3 and the array at index 1 has size 1
"""

 

[오류 해결 방법]

np.concatenate([array_3,array_4],axis=1)
"""
array([[9, 2, 8, 0],
       [3, 2, 7, 6],
       [2, 2, 4, 5]])
"""

 

위의 오류를 해결하는 방법은 결합하고자 하는 축을 제외한 나머지 축들을 통일시키거나 인자인 axis에 값을 입력하면 된다. array_3과 array_4의 사이즈는 각각 (3,3), (3,1) 이므로 두 번째 축을 기준으로 결합하면 된다.

 

[다차원 어레이 결합]

array_5 = np.random.randint(0,10,size = [3,3,3])
array_6 = np.random.randint(0,10,size = [3,3,3])

np.concatenate([array_5,array_6],axis=0).shape
# (6, 3, 3)

np.concatenate([array_5,array_6],axis=1).shape
# (3, 6, 3)

np.concatenate([array_5,array_6],axis=2).shape
# (3, 3, 6)

결론적으로는 axis에 기준이 되는 축을 입력시키면 되고 나머지 축의 사이즈만 통일만 된다면 문제 없이 결합이 된다.

 

 

 

 

728x90
반응형

댓글