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
반응형
'Python > Numpy' 카테고리의 다른 글
[Python] np.unique() - 중복된 값들 중 고유한 값들만 반환하기 (0) | 2022.09.21 |
---|---|
[Python] np.argmax, np.argmin - 넘파이 최댓값, 최솟값 인덱스 찾기 (0) | 2022.09.12 |
[Python] np.transpose(), np.swapaxes() - 차원 및 축 변경하기 (0) | 2022.09.12 |
[Python] np.newaxis, np.expand_dims(), np.squeeze() - 차원 및 축 조절하기 (0) | 2022.09.12 |
[Python] np.random - 난수 생성하기 (0) | 2022.09.12 |
댓글