Python scipy稀疏矩阵——访问路径的多个元素

Python scipy稀疏矩阵——访问路径的多个元素,python,cython,sparse-matrix,Python,Cython,Sparse Matrix,我有一个scipy稀疏矩阵a和一个(长)坐标列表 myrows=[i1,i2,…]mycols=[j1,j2,…]。我需要它们的值列表[a[i1,j2],a[i2,j2],…]。我怎样才能很快做到这一点。循环太慢了 我曾考虑过 Cython。内联()/code >(我在代码中的其他地方使用)或编织,但我不知道如何在Cython或C++中高效地使用稀疏类型。我错过了一些简单的东西吗 目前,我使用的黑客似乎效率低下,有时可能是错误的——我会用错误消息标记它。这是我写得很糟糕的代码。注意,它依赖于要在

我有一个scipy稀疏矩阵a和一个(长)坐标列表

myrows=[i1,i2,…]mycols=[j1,j2,…]
。我需要它们的值列表
[a[i1,j2],a[i2,j2],…]
。我怎样才能很快做到这一点。循环太慢了

我曾考虑过<代码> Cython。内联()/code >(我在代码中的其他地方使用)或编织,但我不知道如何在Cython或C++中高效地使用稀疏类型。我错过了一些简单的东西吗

目前,我使用的黑客似乎效率低下,有时可能是错误的——我会用错误消息标记它。这是我写得很糟糕的代码。注意,它依赖于要在addition下保存的元素的顺序,并假设myrows、mycols中的元素在A中

import scipy.sparse as sps
def getmatvals(A,myrows,mycols)  #A is a coo_matrix
    B = sps.coo_matrix((range(1,1+A.nnz),(A.row,A.col)),shape=A.shape)
    T =  sps.coo_matrix(([A.nnz+1]*len(myrows),(myrows,mycols)),shape=A.shape)
    G = B-T  #signify myelements in G by negatives and others by 0's
    H = np.minimum([0]*A.nnz,G.data)  #remove extra elements 
    H = H[np.nonzero(H)]
    H = H + A.nnz
    return A.data[H]

使用scipy.sparse.coo_matrix的nonzero()方法返回具有非零值的索引是否有帮助?然后至少可以缩短循环。您可以查看
dok_矩阵
格式(即将
A
转换为它)。元素查找可能会更快。谢谢,jgloves:这很有帮助,但是仍然有太多的非零。davidW:我仍然需要一个太慢的循环。使用scipy.sparse.coo_matrix的nonzero()方法返回非零值的索引会有帮助吗?然后至少可以缩短循环。您可以查看
dok_矩阵
格式(即将
A
转换为它)。元素查找可能会更快。谢谢,jgloves:这很有帮助,但是仍然有太多的非零。davidW:我仍然需要一个太慢的循环。使用scipy.sparse.coo_matrix的nonzero()方法返回非零值的索引会有帮助吗?然后至少可以缩短循环。您可以查看
dok_矩阵
格式(即将
A
转换为它)。元素查找可能会更快。谢谢,jgloves:这很有帮助,但是仍然有太多的非零。戴维德:我还需要一个太慢的环路。