Использование numpy.argmax () на многомерных массивах - PullRequest
13 голосов
/ 27 апреля 2011

У меня есть 4-мерный массив, т. Е. data.shape = (20,30,33,288).Я нахожу индекс ближайшего массива к n, используя

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

Я хотел бы использовать data[index] = "values" с values.shape = (20,33,288), но data[index] возвращает ошибку "index (8) outдиапазона (0 <= index <1) в измерении 0 "</em> или эта операция занимает относительно много времени для вычисления и возвращает матрицу с формой, которая, кажется, не имеет смысла.

Каквернуть массив правильных значений?то есть

data[index] = "values" with values.shape = (20,33,288)

Это кажется простой проблемой, есть простой ответ?

В конечном итоге я хотел бы найти index2 = abs(data - n2).argmin(axis = 1), чтобы я мог выполнить операцию, скажем, сумму данныхпри индексации данных в index2 без циклического перебора переменных.Возможно ли это?

Я использую python2.7 и numpy версию 1.5.1.

Ответы [ 2 ]

14 голосов
/ 27 апреля 2011

Вы должны иметь доступ к максимальным значениям, индексированным index, используя numpy.indices():

x, z, t = numpy.indices(index.shape)
data[x, index, z, t]
1 голос
/ 27 апреля 2011

Если я вас правильно понял, это должно сработать:

numpy.put(data, index, values)

Сегодня я узнал что-то новое, спасибо.

...