Подход № 1
Создайте маску с этими argmax
-
mask = idx[:,None] == np.arange(arr2D.shape[1])
Затем используйте эти индексы, а затем используйте их для создания этих 1 и-1s массив -
out = 2*mask-1
В качестве альтернативы, мы могли бы использовать np.where
-
out = np.where(mask,1,-1)
Подход № 2
Другой способ созданиямаска будет -
mask = np.zeros(arr2D.shape, dtype=bool)
mask[np.arange(len(idx)),idx] = 1
Затем получите out
, используя один из методов, перечисленных в подходе № 1.
Подход № 3
Еще один способ был бы таким:
out = np.full(arr2D.shape, -1)
out[np.arange(len(idx)),idx] = 1
В качестве альтернативы, мы могли бы использовать np.put_along_axis
для назначения -
np.put_along_axis(out,idx[:,None],1,axis=1)