2012-10-14 5 views
1

Si j'ai deux ndarrays:vstack tableaux numpy

a.shape # returns (200,300, 3) 
b.shape # returns (200, 300) 

numpy.vstack((a,b)) # Gives error 

imprimerait l'erreur: ValueError: les tableaux doivent avoir le même nombre de dimensions

J'ai essayé de faire vstack((a.reshape(-1,300), b) quel genre d'œuvres, mais le la sortie est très bizarre.

Répondre

0

Vous ne spécifiez pas la forme finale souhaitée. Si c'est (200, 300, 4), vous pouvez utiliser à la place dstack:

>>> import numpy as np 
>>> a = np.random.random((200,300,3)) 
>>> b = np.random.random((200,300)) 
>>> c = np.dstack((a,b)) 
>>> c.shape 
(200, 300, 4) 

Fondamentalement, lorsque vous empilez, les longueurs doivent se mettre d'accord dans tous les autres axes.

[Mise à jour basée sur un commentaire:]

Si vous voulez (800, 300), vous pouvez essayer quelque chose comme ceci:

>>> a = np.ones((2, 3, 3)) * np.array([1,2,3]) 
>>> b = np.ones((2, 3)) * 4 
>>> c = np.dstack((a,b)) 
>>> c 
array([[[ 1., 2., 3., 4.], 
     [ 1., 2., 3., 4.], 
     [ 1., 2., 3., 4.]], 

     [[ 1., 2., 3., 4.], 
     [ 1., 2., 3., 4.], 
     [ 1., 2., 3., 4.]]]) 
>>> c.T.reshape(c.shape[0]*c.shape[-1], -1) 
array([[ 1., 1., 1.], 
     [ 1., 1., 1.], 
     [ 2., 2., 2.], 
     [ 2., 2., 2.], 
     [ 3., 3., 3.], 
     [ 3., 3., 3.], 
     [ 4., 4., 4.], 
     [ 4., 4., 4.]]) 
>>> c.T.reshape(c.shape[0]*c.shape[-1], -1).shape 
(8, 3) 
+0

Je suis en train d'empiler les images côte à côte. Y a-t-il un moyen de s'empiler le long du premier axe pour a et b? – user1695915