Вы можете использовать матричную математику для решения этой проблемы, потому что у вас есть только одно ненулевое значение на строку. Простое скалярное произведение с вектором «позиция» даст вам желаемый результат. Вы хотите эмулировать матричное уравнение A * x = y, и до тех пор, пока x является вектором столбца, вы получите вектор-столбец в качестве ответа.
>>> import numpy as np
>>> a = np.array([[0., 1., 0.],
... [1., 0., 0.],
... [1., 0., 0.],
... [0., 0., 1.],
... [1., 0., 0.],
... [1., 0., 0.]])
>>> x = (0,1,2)
>>> y = np.dot(a,x)
>>> y
array([1., 0., 0., 2., 0., 0.])
Используя этот метод, вы можете изменить вектор «положения» на любой, какой захотите, и он будет соответствующим образом «индексироваться» (я поместил это в кавычки, так как это математический прием). Например:
>>> x = (2,4,8)
>>> np.dot(a,x)
array([4., 2., 2., 8., 2., 2.])