2015-05-11 2 views
6

Perché fa questo lavoro:errore quando l'indicizzazione con 2 dimensioni in NumPy

>>> (tf[:,[91,1063]])[[0,3,4],:] 
array([[ 0.04480133, 0.01079433], 
     [ 0.11145042, 0.  ], 
     [ 0.01177578, 0.01418614]]) 

Ma questo non lo fa:

>>> tf[[0,3,4],[91,1063]] 
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,) 

Che cosa sto facendo di sbagliato?

risposta

9
tf[:,[91,1063]])[[0,3,4],:] 

opera in 2 fasi, selezionando prima 2 colonne, e poi 3 righe da quel risultato

tf[[0,3,4],[91,1063]] 

tenta di selezionare tf[0,91], tf[3,1063] e ft[4, oops].

tf[[[0],[3],[4]], [91,1063]] 

dovrebbe funzionare, dando lo stesso risultato della prima espressione. pensa che il primo elenco sia una colonna, selezionando le righe.

tf[np.array([0,3,4])[:,newaxis], [91,1063]] 

è un altro modo di generare tale matrice indice di colonna

tf[np.ix_([0,3,4],[91,1063])] 

np.ix_ può contribuire a generare questi array indice.

In [140]: np.ix_([0,3,4],[91,1063]) 
Out[140]: 
(array([[0], 
     [3], 
     [4]]), array([[ 91, 1063]])) 

Questi array di colonna e riga vengono trasmessi insieme per produrre una matrice 2D di coordinate

[[(0,91), (0,1063)] 
[(3,91), ...  ] 
....    ]] 

Questa è la parte rilevante dei documenti: http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#purely-integer-array-indexing

praticamente sto ripetendo mia risposta a Composite Index updates for Numpy Matrices

+0

Ho capito grazie. – user1019129