2015-05-18 19 views
9

Sto tentando di concatenare 4 matrici, una matrice 1D di forma (78427,) e 3 serie di forme 2D (78427, 375/81/103). Fondamentalmente si tratta di 4 array con funzionalità per 78427 immagini, in cui l'array 1D ha solo 1 valore per ogni immagine.Numpy concatena gli array 2D con l'array 1D

Ho provato concatenando le matrici come segue:

>>> print X_Cscores.shape 
(78427, 375) 
>>> print X_Mscores.shape 
(78427, 81) 
>>> print X_Tscores.shape 
(78427, 103) 
>>> print X_Yscores.shape 
(78427,) 
>>> np.concatenate((X_Cscores, X_Mscores, X_Tscores, X_Yscores), axis=1) 

Ne risulta il seguente errore:

Traceback (most recent call last): File "", line 1, in ValueError: all the input arrays must have same number of dimensions

Il problema sembra essere l'array 1D, ma non può davvero capire perché (ha anche 78427 valori). Ho provato a trasporre l'array 1D prima di concatenarlo, ma anche questo non ha funzionato.

Qualsiasi aiuto su quale sia il metodo giusto per concatenare questi array sarebbe apprezzato!

risposta

10

Provare a concatenare X_Yscores[:, None] (o A[:, np.newaxis] come suggerisce l'imaluengo). Questo crea un array 2D da un array 1D.

Esempio:

A = np.array([1, 2, 3]) 
print A.shape 
print A[:, None].shape 

uscita:

(3,) 
(3,1) 
+3

Solo per segnalare che 'A [:, np.newaxis]' ha lo stesso comportamento di 'A [:, None]' e può a volte essere più intuitivo (in realtà 'np.newaxis == None'). –

+0

tuttavia questo è vero solo se entrambi hanno la stessa dimensione. Nella maggior parte dei casi, mi ritrovo con Array A con forma (8400,) e Array B con forma (8399, 21). Come faccio a troncare/eliminare le ultime poche righe di A in modo che sia A sia B abbiano le stesse forme come (8399,) e (8399, 21). Si prega di avvisare. –

2

Non sono sicuro se si desidera qualcosa di simile:

a = np.array([ [1,2],[3,4] ]) 
b = np.array([ 5,6 ]) 

c = a.ravel() 
con = np.concatenate((c,b)) 

array([1, 2, 3, 4, 5, 6]) 

O

np.column_stack((a,b)) 

array([[1, 2, 5], 
     [3, 4, 6]]) 

np.row_stack((a,b)) 

array([[1, 2], 
     [3, 4], 
     [5, 6]]) 
+0

qualsiasi opinione su questo: https://stackoverflow.com/questions/48676461/concatenate-combine-mx1-numpy-array-with-mxn-numpy-array –

2

Si può provare questo one-liner:

concat = numpy.hstack([a.reshape(dim,-1) for a in [Cscores, Mscores, Tscores, Yscores]]) 

Il "segreto" è quello di rimodellare utilizzando il noto, dimensione comune in un asse, e -1 per l'altro, e si adatta automaticamente alle dimensioni (creando un nuovo asse se necessario).

+0

Potrebbe aiutare qui: https://stackoverflow.com/questions/ 48676461/concatenate-combinazione-MX1-NumPy-array-con-mxn-numpy-array –