programing

두 개의 NumPy 배열을 세로로 연결

nasanasas 2020. 11. 24. 08:03
반응형

두 개의 NumPy 배열을 세로로 연결


다음을 시도했습니다.

>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6])
>>> np.concatenate((a,b), axis=0)
array([1, 2, 3, 4, 5, 6])
>>> np.concatenate((a,b), axis=1)
array([1, 2, 3, 4, 5, 6])

그러나 적어도 하나의 결과는 다음과 같을 것으로 예상합니다.

array([[1, 2, 3],
       [4, 5, 6]])

수직으로 연결되지 않는 이유는 무엇입니까?


a둘 다 b하나의 축만 가지고 있기 때문에 그 모양은 (3)이고 axis 매개 변수는 연결할 요소의 축을 구체적으로 참조합니다.

이 예제는 concatenate축으로 무엇을하는지 명확히해야합니다 . 두 개의 축이있는 두 벡터를 형태로 취하십시오 (2,3).

a = np.array([[1,5,9], [2,6,10]])
b = np.array([[3,7,11], [4,8,12]])

첫 번째 축을 따라 연결합니다 (첫 번째 행과 두 번째 행) :

np.concatenate((a,b), axis=0)
array([[ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11],
       [ 4,  8, 12]])

두 번째 축을 따라 연결합니다 (첫 번째 열과 두 번째 열) :

np.concatenate((a, b), axis=1)
array([[ 1,  5,  9,  3,  7, 11],
       [ 2,  6, 10,  4,  8, 12]])

제시 한 출력을 얻으려면 다음을 사용할 수 있습니다. vstack

a = np.array([1,2,3])
b = np.array([4,5,6])
np.vstack((a, b))
array([[1, 2, 3],
       [4, 5, 6]])

으로 여전히 할 수 concatenate있지만 먼저 모양을 변경해야합니다.

np.concatenate((a.reshape(1,3), b.reshape(1,3)))
array([[1, 2, 3],
       [4, 5, 6]])

마지막으로 의견에서 제안한대로 모양을 변경하는 한 가지 방법은 다음을 사용하는 것입니다 newaxis.

np.concatenate((a[np.newaxis,:], b[np.newaxis,:]))

실제 문제가 두 개의 1-D 배열을 수직으로 연결 concatenate하는 것이고이 작업을 수행 하는 데 사용 하는 것에 집착하지 않는 경우 np.column_stack 사용을 제안합니다 .

In []: a = np.array([1,2,3])
In []: b = np.array([4,5,6])
In []: np.column_stack((a, b))
array([[1, 4],
       [2, 5],
       [3, 6]])

numpy의 잘 알려지지 않은 기능은 r_. 이것은 배열을 빠르게 구축하는 간단한 방법입니다.

import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.r_[a[None,:],b[None,:]]
print(c)
#[[1 2 3]
# [4 5 6]]

의 목적은 a[None,:]배열에 축을 추가하는 것입니다 a.


a = np.array([1,2,3])
b = np.array([4,5,6])
np.array((a,b))

뿐만 아니라 작동

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

목록 목록이든 1D 배열 목록이든 관계없이 np.array2D 배열을 만들려고합니다.

그러나 기능 np.concatenate군이 어떻게 stack작동 하는지 이해하는 것도 좋은 생각 입니다. 이 맥락에서 입력 concatenate으로 2d 배열 (또는 np.array2d 배열로 변할 모든 것)의 목록 필요합니다 .

np.vstack first loops though the inputs making sure they are at least 2d, then does concatenate. Functionally it's the same as expanding the dimensions of the arrays yourself.

np.stack is a new function that joins the arrays on a new dimension. Default behaves just like np.array.

Look at the code for these functions. If written in Python you can learn quite a bit. For vstack:

return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)

참고URL : https://stackoverflow.com/questions/21887754/concatenate-two-numpy-arrays-vertically

반응형