Вы можете сгенерировать ndarray интереса, сравнивая vals
против arange до значения max
и используя broadcasting
, чтобы получить матрицу из результата:
vals = np.asarray(idvals)
u = np.unique(vals)
vals_b = vals[:,None]
a = (np.arange(max(u)+1) == vals_b).view('i1')
print(a)
array([[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 1]], dtype=int8)
Если мы построим разреженную матрицу из массива, мы действительно получим, как указано:
from scipy import sparse
print(sparse.csr_matrix(a))
(0, 0) 1
(1, 0) 1
(2, 0) 1
(3, 1) 1
(4, 1) 1
(5, 1) 1
(6, 2) 1
(7, 2) 1
(8, 2) 1
(9, 4) 1