Использование numpy.argmax() для многомерных массивов

У меня есть 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] возвращает индекс ошибки (8) вне диапазона (0 <= index < 1) в размере 0 "или эта операция занимает относительно длинную время для вычисления и возвращает матрицу с формой, которая, по-видимому, не имеет смысла.

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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

numpy.put(data, index, values)

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