Поиск наилучшего прохода путем вычисления максимального значения в numpy

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

У меня есть три numpys следующим образом. Имя numpy mat описывает результат определенной операции вычисления. Numpy named pos описывает столбец mat , а numpy named prv описывает строки mat .

 prv = np.array(['P','N','U'])
pos = np.array(['E','P','T','N','U'])
mat = np.array([[9,1,2,3,4],
                [4,2,1,2,1],
                [2,7,5,8,9]])
 

Необходимо найти максимальное значение в каждом столбце и в соответствии с этим результатом построить новый numpy, который будет описывать переход от prv к pos .

То есть, согласно приведенным выше данным, результат должен быть:

 [['P','E'],
 ['U','P'],
 ['U','T'],
 ['U','N'],
 ['U','U']]
 

Объяснение: наибольшее значение столбца 0 в mat (столбец, представленный E ) помещается в строку 0 (строка, представленная P ). Таким образом, лучшим ruth to E будет from P (первая строка в rsult будет ['P', 'E'] ). В строке N нет максимальных значений, поэтому результатов пути не будет.
Напротив, строка U содержит четыре результата с максимальными значениями. В столбце 1 ( P ), в столбце 2 ( T ), в столбце 3 ( N ) и в столбце 4 ( U ).

Примечание: В случае равенства не имеет значения, какое значение выбрано (но только одно значение)

Ответ №1:

Это сводится к простой повторной маркировке argmax :

 np.c_[prv[mat.argmax(0)],pos]

# array([['P', 'E'],
#        ['U', 'P'],
#        ['U', 'T'],
#        ['U', 'N'],
#        ['U', 'U']], dtype='<U1')