2014-12-19 10 views
16

Qual è la differenza tra 2 allineamenti cui forme sono-differenza tra queste forme di matrice in NumPy

(442,1) e (442,)?

stampa entrambe queste produce un output identico, ma quando posso controllare per l'uguaglianza ==, ottengo un vettore 2D come questo-

array([[ True, False, False, ..., False, False, False], 
     [False, True, False, ..., False, False, False], 
     [False, False, True, ..., False, False, False], 
     ..., 
     [False, False, False, ..., True, False, False], 
     [False, False, False, ..., False, True, False], 
     [False, False, False, ..., False, False, True]], dtype=bool) 

Qualcuno può spiegare la differenza?

risposta

28

Una matrice di forma (442, 1) è bidimensionale. Ha 442 righe e 1 colonna.

Una matrice di forma (442,) è monodimensionale e consiste di 442 elementi.

Si noti che anche le loro reprs hanno un aspetto diverso. C'è una differenza nel numero e la disposizione delle parentesi:

In [7]: np.array([1,2,3]).shape 
Out[7]: (3,) 

In [8]: np.array([[1],[2],[3]]).shape 
Out[8]: (3, 1) 

Nota che si potrebbe usare np.squeeze per rimuovere assi di lunghezza 1:

In [13]: np.squeeze(np.array([[1],[2],[3]])).shape 
Out[13]: (3,) 

NumPy broadcasting rules consentire nuovi assi a essere aggiunto automaticamente a sinistra quando necessario. Quindi (442,) può trasmettere a (1, 442). E gli assi di lunghezza 1 possono trasmettere a qualsiasi lunghezza. Dunque quando si verifica l'uguaglianza tra una matrice di forma (442, 1) e un array di forma (442,), il secondo array viene promosso in forma (1, 442) e quindi i due array espandono gli assi di lunghezza 1 in modo che entrambi diventino array di forme (442, 442). Questo è il motivo per cui quando hai testato l'uguaglianza il risultato era una matrice booleana di forma (442, 442).

In [15]: np.array([1,2,3]) == np.array([[1],[2],[3]]) 
Out[15]: 
array([[ True, False, False], 
     [False, True, False], 
     [False, False, True]], dtype=bool) 

In [16]: np.array([1,2,3]) == np.squeeze(np.array([[1],[2],[3]])) 
Out[16]: array([ True, True, True], dtype=bool) 
+0

Grazie. Sono nuovo nel data mining e non sono in grado di comprendere la sintassi ([valore],) rispetto alla sintassi normale ([valore]) per le forme di matrice. Quella virgola in più rendeva le cose contorte. – goelakash

+10

La virgola in '(422,)' indica che l'espressione è una tupla. È una tupla con un elemento all'interno. Senza la virgola, '(422)' viene valutato come intero '422'. La forma di un array è sempre una tupla. – unutbu

+2

Gli array di dimensioni (1,442) e (442) sono uguali a quelli? – bikashg

Problemi correlati