Вам не нужно использовать sparse
. np.eye
имеет параметр смещения k
. И создание (2,2) Hb
является тривиальной задачей:
In [89]: v,w=2,3
In [90]: Γ = np.eye(10,k=0)*v+np.eye(10,k=-1)*w
In [91]: Γ
Out[91]:
array([[2., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[3., 2., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 3., 2., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 3., 2., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 3., 2., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 3., 2., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 3., 2., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 3., 2., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 3., 2., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 3., 2.]])
In [92]: Hb = np.array([[0,1],[1,0]])
In [93]: Hb
Out[93]:
array([[0, 1],
[1, 0]])
In [94]: np.kron(Hb, Γ)
Out[94]:
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 2., 0., 0., 0., 0., 0.,
0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 3., 2., 0., 0., 0., 0.,
0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 3., 2., 0., 0., 0.,
0., 0., 0., 0.],
....
[0., 0., 0., 0., 0., 0., 0., 0., 3., 2., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0.]])
In [95]: _.shape
Out[95]: (20, 20)
sparse.kron(Hb, Γ)
с вашим разреженным Hb
должно давать то же самое, но в качестве разреженной матрицы.
Из сообщения об ошибке я подозреваю, что kron(Hb, Γ)*[[1],[0]]
пытается получить матричный продукт. Хотя второй аргумент явно (2,1), я не понимаю, почему первый, kron()
равен (3,3). В любом случае явно существует несоответствие форм, будь то матричный продукт, поэлементный продукт, разреженный или плотный.