#python #pandas #numpy
#python #pandas #numpy
Вопрос:
У меня есть матрица (скажем, строка 575 и столбец 5) с некоторыми случайными значениями. Я хочу преобразовать ее в другую матрицу того же размера (строка 575 и столбец 5), где в каждой строке элементу с максимальным значением будет присвоено 1, а остальные элементы в той же строке будут иметь нулевое значение. Выходной результат должен быть в формате, приведенном ниже. Пожалуйста, помогите. Заранее спасибо!
array([[1., 0., 0., 0., 0.],
[0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0.],
...,
[0., 0., 0., 1., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.]])
Комментарии:
1. Этот вопрос на самом деле является вопросом типа «дайте мне код», на который здесь, в stackoverflow, смотрят неодобрительно. Сказав это…
(a == a.max(axis=1, keepdims=True)).astype(float)
2. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.
Ответ №1:
Один из подходов заключается в использовании np.argmax
, чтобы найти индексы максимальных значений, а затем использовать эти индексы для np.eye
:
import numpy as np
np.random.seed(42)
# generate some random toy data
ma = np.random.random(size=(575, 5))
# find the maximum across rows
indices = np.argmax(ma, axis=1)
# create the matrix by index on np.eye
res = np.eye(5)[indices].astype(float)
print(res)
Вывод
[[0. 0. 0. 0. 1.]
[0. 0. 1. 0. 0.]
[1. 0. 0. 0. 0.]
...
[0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]]