2013-10-02 11 views
5
>>> allData.shape 
Out[72]: (8L, 161L) 
>>> mask = allData[2,:] 
>>> allData[[0,1,3],:][:,mask == 1] # works fine 
>>> allData[[0,1,3],mask == 1] # error: ValueError: shape mismatch: objects cannot be broadcast to a single shape 

Dlaczego nie można indeksować numpy w ramach pojedynczego nawiasu []?Tablica Numpy nie może indeksować w jednym []

Odpowiedz

5

Zmiana allData[[0,1,3],mask == 1] na allData[[0,1,3],argwhere(mask == 1)] powinna to naprawić.

Krótkie wyjaśnienie, jeśli wycinamy tablicę według [[list1], [list2]], obie listy mają być listami indeksów. Jeśli jedna z nich zostanie zastąpiona przez :, aby wziąć cały element tej osi, wówczas druga lista może być tablicą typu Boolean o tym samym rozmiarze. Tylko JEDEN z nich musi zostać zastąpiony przez :. Rozważmy następujący przykład tablicy 3D:

b=random.random((5, 10,2)) 
b[[0,1,3],:, some_mask==1] #works 
b[:,:, some_mask==1] #works 
b[[0,1,3],[2,4], some_mask==1] #ValueError