scipy Kron积上的有效迭代

i34xakig  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(147)

我想得到一个更紧凑,更有效的算法,我在做什么。我的任务是把一个矩阵与单位元的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)

有人知道这样的事情是否可能吗?

zsbz8rwp

zsbz8rwp1#

我有个审判的想法
定义一个函数来链接矩阵列表中的一些kron调用:

In [50]: def foo(alist):
    ...:     M = alist[0]
    ...:     for a in alist[1:]:
    ...:         M = sparse.kron(M,a)
    ...:     return M
    ...:

你的两个矩阵:

In [51]: A=sparse.csr_matrix([[0., 0.],
    ...:    [1., 0.]])
    ...: Id=sparse.identity(2)

做一个列表,在这个例子中,3个id,2个在A之后:

In [52]: alist = [Id]*3+[A]+[Id]*2

In [53]: alist
Out[53]: 
[<2x2 sparse matrix of type '<class 'numpy.float64'>'
    with 2 stored elements (1 diagonals) in DIAgonal format>,
 <2x2 sparse matrix of type '<class 'numpy.float64'>'
    with 2 stored elements (1 diagonals) in DIAgonal format>,
 <2x2 sparse matrix of type '<class 'numpy.float64'>'
    with 2 stored elements (1 diagonals) in DIAgonal format>,
 <2x2 sparse matrix of type '<class 'numpy.float64'>'
    with 1 stored elements in Compressed Sparse Row format>,
 <2x2 sparse matrix of type '<class 'numpy.float64'>'
    with 2 stored elements (1 diagonals) in DIAgonal format>,
 <2x2 sparse matrix of type '<class 'numpy.float64'>'
    with 2 stored elements (1 diagonals) in DIAgonal format>]

并将其传递给foo

In [54]: M = foo(alist)

In [55]: M
Out[55]: 
<64x64 sparse matrix of type '<class 'numpy.float64'>'
    with 512 stored elements (blocksize = 2x2) in Block Sparse Row format>

然后,只需迭代可能的Id/A混合列表,使用不同数量的before和after。
它节省打字,如果不是速度。

相关问题