我有一个scipy稀疏矩阵A和一个(长)坐标列表
myrows=[i1,i2,...] mycols=[j1,j2,...]
。我需要一个他们的值列表[A[i1,j2],A[i2,j2],...]
。我怎么能快速做到这一点。循环太慢了。
我已经考虑过cython.inline()
(我在代码的其他地方使用)或编织,但我不知道如何在cython或C ++中有效地使用稀疏类型。我错过了一些简单的东西吗?
目前,我正在使用看似效率低下且有时可能出错的黑客攻击 - 我会用错误消息标记。这是我写得很糟糕的代码。请注意,它依赖于在添加时要保留的元素的顺序,并假设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]