У меня есть пара ndarrays
с одинаковой формой, и я хотел бы получить один массив (одинаковой формы) с максимумом абсолютных значений для каждого элемента. Поэтому я решил сложить все массивы, а затем выбрать значения вдоль новой сложенной оси. Но как это сделать?
Пример
Скажем, у нас есть два одномерных массива по 4 элемента в каждом, поэтому мой составной массив выглядит как
>>> stack
array([[ 4, 1, 2, 3],
[ 0, -5, 6, 7]])
Если бы меня заинтересовал максимум, что я мог бы сделать
>>> numpy.amax(stack, axis=0)
array([4, 1, 6, 7])
Но мне нужно учитывать и отрицательные значения, поэтому я выбрал
>>> ind = numpy.argmax(numpy.absolute(stack), axis=0)
>>> ind
array([0, 1, 1, 1])
Так что теперь у меня есть индексы, которые мне нужны, но как применить это к массиву с накоплением? Если я просто индексирую stack
по ind
, numpy делает что-то, что мне не нужно:
>>> stack[ind]
array([[ 4, 1, 2, 3],
[ 0, -5, 6, 7],
[ 0, -5, 6, 7],
[ 0, -5, 6, 7]])
То, что я хочу получить, это array([4, -5, 6, 7])
Или спросить с несколько иной точки зрения: как мне получить массив numpy.amax(stack, axis=0)
на основе индексов, возвращаемых numpy.argmax(stack, axis=0)
?