На простом подходе используется numpy индексирование:
import numpy as np
a = np.zeros([2, 2])
b = np.array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
values = np.array([10, 20, 30, 40])
rows, cols = zip(*b)
a[rows, cols] = values
print(a)
Выход
[[10. 20.]
[30. 40.]]
Альтернативой является использование csr_matrix конструктор от scipy:
import numpy as np
from scipy.sparse import csr_matrix
a = np.zeros([2, 2])
b = np.array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
values = np.array([10, 20, 30, 40])
a = csr_matrix((values, zip(*b)), a.shape).todense()
print(a)
Вывод
[[10 20]
[30 40]]