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

时间:2018-02-01 14:02:45

标签: python scipy sparse-matrix linear-algebra linear

给定两个列向量x,y:scipy.sparse.csc_matrix,其中len(x)== len(y)== N和max(x.nnz,y.nnz)== M,以及对称N ×N矩阵A:scipy.sparse.csc_matrix,其中对于所有列j,A [j] .nnz = C,我需要计算xT * 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来说是一个主要的减速。

0 个答案:

没有答案