python - 从稀疏矩阵中轻松抽取向量,并从样本中创建一个新矩阵(python)

标签 python scipy sparse-matrix sampling

这个问题有两个部分(也许一个解决方案?):

从稀疏矩阵中抽取向量:有没有一种简单的方法可以从稀疏矩阵中抽取向量? 当我尝试使用 random.sample 对行进行采样时,我收到 TypeError: sparse matrix length is ambiguous。

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)]

还有其他高效/优雅的想法吗?密集矩阵大小为 1000x30000 并且可以更大。

从稀疏向量列表构造稀疏矩阵:现在假设我有一个采样向量列表 sampledRows,如何将它转换为稀疏矩阵而不对其进行增密,将其转换为列出然后将其转换为 lil_matrix?

最佳答案

尝试

sm[np.random.sample(sm.shape[0], K, replace=False), :]

这会得到一个只有 K 行的 LIL 格式矩阵(按照 random.sample 确定的顺序)。我不确定它是否超快,但它真的不会比像您目前正在做的那样逐行手动访问更糟糕,并且可能会预先分配结果。

关于python - 从稀疏矩阵中轻松抽取向量,并从样本中创建一个新矩阵(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855913/

相关文章:

python - Python 3 中的计算精度

模块之间的python全局变量

python - (Python) 使用 scikits bootstrap 估计回归参数置信区间

python - 从矩阵中有效地减去向量(Scipy)

python - 尽管密度极低,但使用稀疏的 Pandas 数据帧没有空间优势

r - R中的大数据内存问题

python - 运行不可重入临界区的继承方法

python bottle在WINDOWS上可以在同一个地址和端口上运行两个程序

python - 直接打开/加载图像作为 numpy ndarray

python 蟒: ImportError undefined symbol: ATL_cpttrsm