Вы можете сравнить элементы с их минимальными значениями по столбцам, а затем регистрировать с uint8, чтобы сэкономить немного места:
>>> import numpy as np
>>> np.random.seed(444)
>>> arr = np.random.rand(10, 4)
>>> (arr == arr.min(axis=0)).astype(np.uint8)
array([[0, 0, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 1],
[0, 1, 0, 0],
[0, 0, 1, 0]], dtype=uint8)
Из-за трансляции NumPy сравнениеarr == arr.min(axis=0)
даст результат, который имеет ту же форму, что и arr
, даже если arr.min(axis=0)
будет иметь форму (4,)
.
Обратите внимание, что если столбцы имеют повторяющиеся минимумы, это может привести к созданию более одного "1 "в одном столбце.