2011-04-27 3 views
10

mam 4 wymiarową macierz, to data.shape = (20,30,33,288). I znajduję indeks najbliższego tablicy do n użyciuStosując numpy.argmax() w wielowymiarowych tablic

index = abs(data - n).argmin(axis = 1), so 
index.shape = (20,33,288) with the indices varying. 

ja jak używać data[index] = "values" z values.shape = (20,33,288), ale data[index] zwraca błąd „wskaźnik (8) poza zakresem (0 < = wskaźnik < 1) w wymiarze 0 " lub ta operacja zajmuje stosunkowo długi czas, aby obliczyć i zwrócić macierz o kształcie, który nie wydaje się mieć sensu.

Jak zwrócić tablicę poprawnych wartości? tj.,

Wydaje się, że jest to prosty problem, czy istnieje prosta odpowiedź?

Chciałbym ostatecznie znaleźć index2 = abs(data - n2).argmin(axis = 1), więc mogę wykonać operację, np. Suma danych w indeksie do danych w indeksie 2 bez przechodzenia przez zmienne. czy to możliwe?

Używam Pythona2.7 i numpy w wersji 1.5.1.

Odpowiedz

12

Powinieneś być w stanie uzyskać dostęp do maksymalnych wartości indeksowanych przez index użyciu numpy.indices():

x, z, t = numpy.indices(index.shape) 
data[x, index, z, t] 
+0

Czy istnieje również odpowiedź, gdy nie znasz ndim? –

+3

@AndreasMueller: Tak, użyj 'tup [: axis] + (index,) + tup [axis:]' jako indeks dla 'data', gdzie' tup' jest krotką zwróconą przez 'numpy.indices()'. –

1

Jeśli ja zrozumiałem, to powinno działać:

numpy.put(data, index, values) 

dowiedziałem się czegoś nowego dzisiaj, dzięki.

+0

Dzięki za odpowiedź. Nie mam "wartości", więc nie sądzę, abym mógł używać numpy.put. Wierzę, że odpowiedź Svena zadziała. – NPB