Один из подходов -
(a == a.max(axis=1, keepdims=1)).astype(float)
Пример запуска -
In [43]: a
Out[43]:
array([[ 0.49596769, 1.15846407, -1.38944733],
[-0.47042814, -0.07512128, 1.90417981]])
In [44]: (a == a.max(axis=1, keepdims=1)).astype(float)
Out[44]:
array([[ 0., 1., 0.],
[ 0., 0., 1.]])
Если есть несколько из них подряд с одинаковым максимальным значением, и вы хотели бы установить только первый в качестве 1
-
idx = a.argmax(axis=1)
out = (idx[:,None] == np.arange(a.shape[1])).astype(float)
Пример запуска -
In [49]: a
Out[49]:
array([[2, 4, 4],
[3, 4, 5]])
In [50]: (a == a.max(axis=1, keepdims=1)).astype(float)
Out[50]:
array([[ 0., 1., 1.],
[ 0., 0., 1.]])
In [51]: idx = a.argmax(axis=1)
In [52]: (idx[:,None] == np.arange(a.shape[1])).astype(float)
Out[52]:
array([[ 0., 1., 0.],
[ 0., 0., 1.]])
Для выполнения, мы можем иметь подход, основанный на инициализации -
def initialization_based(a):
idx = a.argmax(axis=1)
out = np.zeros_like(a,dtype=float)
out[np.arange(a.shape[0]), idx] = 1
return out
Думаю, вам нужен еще один «argsort» там: '(a.argsort (1) .argsort (1) == a.shape [1] -1) .astype (int)'. – Divakar