我想得到一个更紧凑,更有效的算法,我在做什么。我的任务是把一个矩阵与单位元的kron乘积多次。
现在我正在做的事情,虽然它的工作,我不能扩大规模。
import scipy.sparse as sp
from scipy.sparse import csr_matrix
A=[[0., 0.],
[1., 0.]]
Id=sp.identity(2)
A_1=csr_matrix(sp.kron(A,sp.kron(Id,sp.kron(Id,Id))))
A_2=csr_matrix(sp.kron(Id,sp.kron(A,sp.kron(Id,Id))))
A_3=csr_matrix(sp.kron(Id,sp.kron(Id,sp.kron(A,Id))))
A_4=csr_matrix(sp.kron(Id,sp.kron(Id,sp.kron(Id,A))))
注意对于每个A_i,A矩阵向右移动一个空格。虽然这是可行的,但在某个时候,如果我需要为A_20做这件事,它将需要写下一个非常长的sp.kron序列。
这就是为什么我想得到这样的东西:
n_q=20
A_list=[]
for i in range(i,n_q):
A_i=csr_matrix(sp.kron(Id,...sp.kron(A...,sp.kron(Id,Id))))
A_list.append(A_i)
有人知道这样的事情是否可能吗?
1条答案
按热度按时间zsbz8rwp1#
我有个审判的想法
定义一个函数来链接矩阵列表中的一些kron调用:
你的两个矩阵:
做一个列表,在这个例子中,3个id,2个在A之后:
并将其传递给
foo
:然后,只需迭代可能的Id/A混合列表,使用不同数量的before和after。
它节省打字,如果不是速度。