这个问题有两个部分(也许是一个解决方案?):
来自稀疏矩阵的样本向量:是否有一种从稀疏矩阵中采样向量的简单方法?
当我尝试使用random.sample对线进行采样时,我得到一个TypeError:稀疏矩阵长度不明确.
from random import sample
import numpy as np
from scipy.sparse import lil_matrix
K = 2
m = [[1,2],[0,4],[5,0],[0,8]]
sample(m,K) #works OK
mm = np.array(m)
sample(m,K) #works OK
sm = lil_matrix(m)
sample(sm,K) #throws exception TypeError: sparse matrix length is ambiguous.
我目前的解决方案是从矩阵中的行数进行采样,然后使用getrow(),例如:
indxSampls = sample(range(sm.shape[0]), k)
sampledRows = []
for i in indxSampls:
sampledRows+=[sm.getrow(i)]
还有其他有效/优雅的想法吗?密集矩阵大小为1000×30000,可能更大.
从稀疏矢量列表构造稀疏矩阵:现在想象我有采样矢量的列表sampledRows,如何将其转换为稀疏矩阵而不将其密集化,将其转换为列表列表然后将其传递给lil_matrix?