2016-05-12 5 views
1

Ich habe zwei Arrays A und B,verketten zwei mehrdimensionale Arrays in numpy

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

Jetzt möchte ich die beiden Arrays verketten, so dass A zu (8,6,2) mit A[8] = B

erweitert

versuchte ich 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 

und 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 [diese] (http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy. expand_dims.html) zuerst vor concat. – sascha

+0

hey danke, es hat funktioniert :) zuerst mit 'expand_dims' und dann' np.concatanate'. Was meintest du mit expressiven 'np.vstack' dann concat? –

+0

Ich habe nicht gesehen, dass Sie auch np.vstack ausprobiert haben. In diesem Fall würde ich vstack bevorzugen, weil es keine Parameter benötigt und man sofort sehen kann, was passiert. Wenn Sie dies tun müssen, können Sie auch den newaxis-Ansatz (Sie fügen nur Indizierung zu B hinzu) in den Dokumenten verwenden. Es ist ein bisschen kürzer. – sascha

Antwort

2

wahrscheinlich der einfachste Weg ist newaxis wie folgt zu verwenden numpy:

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) 

, die dazu führt:

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

Wie @sascha erwähnt Sie vstack verwenden können (siehe auch hstack, dstack), um direkte Verkettungsoperationen mit einer impliziten Achse durchzuführen (axis = 0, axis = 1, axis =2):

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

, Ergebnis:

(8, 6, 2)