#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')