Python中稀疏向量的双线性范数的高效计算

2024-04-23 21:00:53 发布

您现在位置:Python中文网/ 问答频道 /正文

给定两个列向量x,y:scipy.sparse.csc\u矩阵,其中len(x)==len(y)==N和max(x.nnz,y.nnz)==M,以及对称N×N矩阵a:scipy.sparse.csc\u矩阵,其中,对于所有列j,A[j].nnz=C,我需要计算x.T*A*y=∑∑ᵢ,ⱼx[I]*A[j][I]*y[j],最多M*max(M,C)步数,这是可以实现的具体如下:

  • 在外循环中,我们迭代A的y.nnz列j
  • 在内部循环中,我们迭代:
    • A的x.nnz行i,如果x.nnz<;C,或
    • A的C行i,否则。你知道吗
我的问题是,这是否可以使用高级Python和现有库(如果是,那么如何)实现,或者这是否需要自定义C/C++代码。你知道吗


下面是使用scipy库的朴素Python代码:

(x.T).dot(A).dot(y)[0, 0]

单独计算:

  • x、 T*A使用最多x.nnz*N步,以及
  • ∑ⱼ(x.T*A)[j]*y[j],最多使用M步。你知道吗

这总共需要O(M*N)步,这对于大N来说是一个主要的减速


Tags: 代码ltlen矩阵scipy向量dotmax