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

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

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

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

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

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

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

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

2 ответа

Решение

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

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

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

numpy.put(data, index, values)

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

Другие вопросы по тегам