Получить индексы numpy.элементы argmax по оси
у меня есть N-мерная матрица, которая содержит значения для функции с параметрами N. Каждый параметр имеет дискретное число значений. Мне нужно максимизировать функцию по всем параметрам, кроме одного, что приводит к одномерному вектору размера, равному числу значений не максимизированного параметра. Мне также нужно сохранить, какие значения принимаются другими параметрами.
для этого я хотел итеративно применить numpy.max
над различными осями для уменьшения размерность матрицы, чтобы найти то, что мне нужно. Окончательный вектор будет зависеть только от параметра, который я оставил.
однако у меня возникли проблемы с поиском исходных индексов конечных элементов (которые содержат информацию о значениях, принятых другими параметрами). Я думал об использовании numpy.argmax
аналогично numpy.max
но я не могу получить обратно исходные индексы.
пример того, что я пытаюсь это:
x = [[[1,2],[0,1]],[[3,4],[6,7]]]
args = np.argmax(x, 0)
этот возвращает
[[1 1]
[1 1]]
что означает, что argmax выбирает элементы (2,1,4,7) в исходной матрице. Но как получить их индексы? Я пытался!--5-->, С помощью args
непосредственно в качестве индекса для матрицы x
, куча функций от numpy до index без успеха.
используя numpy.where
не является решением, так как входная матрица может иметь равные значения внутри, поэтому я не смог бы отличить от разных исходных значений.
1 ответов
x.argmax(0)
дает индексы вдоль 1-й оси для максимальных значений. Использовать np.indices
для генерации индексов для другой оси.
x = np.array([[[1,2],[0,1]],[[3,4],[6,7]]])
x.argmax(0)
array([[1, 1],
[1, 1]])
a1, a2 = np.indices((2,2))
(x.argmax(0),a1,a2)
(array([[1, 1],
[1, 1]]),
array([[0, 0],
[1, 1]]),
array([[0, 1],
[0, 1]]))
x[x.argmax(0),a1,a2]
array([[3, 4],
[6, 7]])
x[a1,x.argmax(1),a2]
array([[1, 2],
[6, 7]])
x[a1,a2,x.argmax(2)]
array([[2, 1],
[4, 7]])
если x
имеет другие измерения, генерировать a1
и a2
надлежащим образом.
официальная документация не говорит много о том, как использовать argmax
, но ранее это обсуждалось. Я получил эту общую идею от использование numpy.argmax () на многомерных массивах