2015-05-11 15 views
6

Dlaczego to działa:Błąd podczas indeksowania w 2 wymiarach w NumPy

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

Ale tego nie robi:

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

Co robię źle?

Odpowiedz

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

działa w 2 etapach, najpierw wybierając 2 kolumn, a następnie 3 wiersze z tego wyniku

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

próbuje wybrać tf[0,91], tf[3,1063] i ft[4, oops].

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

powinien działać, dając taki sam wynik, jak w pierwszym wyrażeniu. pomyśl o tym, że pierwsza lista jest kolumną, wybierając wiersze.

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

jest inny sposób wytwarzania tej tablicy indeks kolumny

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

np.ix_ mogą pomagać w tworzeniu tych tablic indeksu.

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

te macierze kolumn i wierszy są transmitowane razem produkować 2d tablicy współrzędnych

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

Jest odpowiednia część docs: http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#purely-integer-array-indexing

Ja w zasadzie powtórzenie moją odpowiedź to Composite Index updates for Numpy Matrices

+0

Mam to dzięki. – user1019129

Powiązane problemy