Как создать матрицу 1 0 из матрицы вероятностей в Python

#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.]]