2015-04-15 5 views
6

Я хочу объединить два массива вертикально в Python с использованием пакета NumPy:Как вертикально объединить два массива в Python?

a = array([1,2,3,4]) 
b = array([5,6,7,8]) 

Я хочу что-то вроде этого:

c = array([[1,2,3,4],[5,6,7,8]]) 

Как мы можем сделать это с помощью функции concatenate? Я проверил эти две функции, но результат тот же:

c = concatenate((a,b),axis=0) 
# or 
c = concatenate((a,b),axis=1) 

У нас это в обоих этих функций:

c = array([1,2,3,4,5,6,7,8]) 

ответ

8

Проблема в том, что как a, так и b являются 1D-массивами и поэтому есть только одна ось.

Вместо этого, вы можете использовать vstack (V для вертикальной):

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

Кроме того, row_stack является псевдонимом функции vstack:

>>> np.row_stack((a,b)) 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 

Стоит также отметить, что несколько массивов одинаковой длины могут быть уложены одновременно. Например, np.vstack((a,b,x,y)) будет иметь четыре строки.

Под капотом vstack работ, убедившись, что каждый массив имеет по меньшей мере два измерения (с помощью atleast_2D) и затем вызвать concatenate соединить эти массивы на первой оси (axis=0).

2

Чтобы использовать concatenate, что вам нужно сделать a и b 2D массивы вместо 1D, как в

c = concatenate((atleast_2d(a), atleast_2d(b))) 

в качестве альтернативы, вы можете просто сделать

c = array((a,b)) 
+0

Благодарим за ответ. Как мы можем горизонтально конкатенировать с помощью 'array'? Это только для вертикальной конкатенации? – user2991243

+0

@ user2991243 Вы можете использовать параметр 'axis' для управления той осью для конкатенации, и по умолчанию она равна' 0'. –

2

Использование np.vstack:

In [4]: 

import numpy as np 
a = np.array([1,2,3,4]) 
b = np.array([5,6,7,8]) 
c = np.vstack((a,b)) 
c 
Out[4]: 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 

In [5]: 

d = np.array ([[1,2,3,4],[5,6,7,8]]) 
d 
​ 
Out[5]: 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 
In [6]: 

np.equal(c,d) 
Out[6]: 
array([[ True, True, True, True], 
     [ True, True, True, True]], dtype=bool) 
3

Может быть, это не является хорошим решением, но это простой способ делает ваш код работает, просто добавьте Reshape:

a = array([1,2,3,4]) 
b = array([5,6,7,8]) 

c = concatenate((a,b),axis=0).reshape((2,4)) 

print c 

из:

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

В общем случае, если у вас есть более 2 массивов с одинаковой длиной:

reshape((number_of_arrays, length_of_array)) 
Смежные вопросы