2016-05-12 3 views
1

У меня есть два массива A и B,конкатенация два многомерные массивы в NumPy

>> np.shape(A) 
>> (7, 6, 2) 
>> np.shape(B) 
>> (6,2) 

Теперь я хочу, чтобы объединить два массива таким образом, что A распространяется на (8,6,2) с A[8] = B

Я попытался np.concatenate()

>> np.concatenate((A,B),axis = 0) 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-40-d614e94cfc50> in <module>() 
----> 1 np.concatenate((A,B),axis = 0) 

ValueError: all the input arrays must have same number of dimensions 

и np.vstack()

>> np.vstack((A,B)) 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-41-7c091695f277> in <module>() 
----> 1 np.vstack((A,B)) 
//anaconda/lib/python2.7/site-packages/numpy/core/shape_base.pyc in vstack(tup) 
    228 
    229  """ 
--> 230  return _nx.concatenate([atleast_2d(_m) for _m in tup], 0) 
    231 
    232 def hstack(tup): 

ValueError: all the input arrays must have same number of dimensions 
+3

Do [это] (http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy. expand_dims.html) сначала до concat. – sascha

+0

привет, он работал :) сначала с использованием 'expand_dims', а затем' np.concatanate'. Кстати, что вы имели в виду, используя более выразительный 'np.vstack', тогда concat? –

+0

Я не видел, что вы тоже пытались использовать np.vstack. В этом случае я бы предпочел vstack, потому что он не нуждается в параметрах, и можно сразу увидеть, что происходит. Если вам нужно много сделать этот файл expand_dims, вы также можете попробовать newaxis-подход (вы добавляете только индексирование в B), упомянутое в документах. Это немного короче. – sascha

ответ

2

Вероятно, самый простой способ заключается в использовании NumPy newaxis так:

import numpy as np 

A = np.zeros((7, 6, 2)) 
B = np.zeros((6,2)) 
C = np.concatenate((A,B[np.newaxis,:,:]),axis=0) 
print(A.shape,B.shape,C.shape) 

, что приводит к следующим образом:

(7, 6, 2) (6, 2) (8, 6, 2) 

Как @sascha упоминалось вы можете использовать vstack (также см hstack, dstack) для выполнения операций прямой конкатенации с неявной осью (соответственно axis = 0, axis = 1, axis =2):

D = np.vstack((A,B[np.newaxis,:,:])) 
print(D.shape) 

, результат:

(8, 6, 2) 
Смежные вопросы