2009-11-13 17 views

risposta

6

hstack e vstack non fanno cambiare il numero delle dimensioni delle matrici: non fanno che li hanno messi "fianco a fianco". Pertanto, la combinazione di array bidimensionali crea un nuovo array bidimensionale (non uno 3D!).

È possibile eseguire le operazioni suggerite da Daniel (utilizzare direttamente numpy.array([d1, d2])).

È possibile, in alternativa convertire le matrici a matrici 3D prima di accatastamento, con l'aggiunta di una nuova dimensione per ogni matrice:

d3 = numpy.vstack([ d1[newaxis,...], d2[newaxis,...] ]) # shape = (2, 18, 18) 

Infatti, d1[newaxis,...].shape == (1, 18, 18), ed è possibile impilare entrambi gli array 3D direttamente e ottenere il nuovo 3D array (d3) che volevi.

+0

:) grazie a EOL, ora saprò di più su vstack, hstack – vernomcrp

+1

'np.vstack ([a [np.newaxis, ...], b [np.newaxis, ...]])' ha funzionato come un incantesimo ! Grazie. – thepunitsingh

21

Solo facendo d3 = array([d1,d2]) sembra funzionare per me:

>>> from numpy import array 
>>> # ... create d1 and d2 ... 
>>> d1.shape 
(18,18) 
>>> d2.shape 
(18,18) 
>>> d3 = array([d1, d2]) 
>>> d3.shape 
(2, 18, 18) 
+0

oh suo lavoro, grazie Daniel :) – vernomcrp

+1

Ho una domanda simile. Se ho già ottenuto il d3 con la forma (2,18,18) e voglio aggiungere un altro array d-2 dx (18x18) in d3 per creare un array 3-d (3,18,18). Cosa dovrei fare? –

+1

Semplicemente 'vstack (d3, d4 [np.newaxis, ...])', come nella mia risposta. – EOL