【问题标题】:How to efficiently shuffle a scipy sparse matrix, whatever its format?如何有效地洗牌一个 scipy 稀疏矩阵,无论其格式如何?
【发布时间】:2021-03-13 16:12:12
【问题描述】:

如何打乱 scipy 稀疏矩阵的行?

有一个scikitlearn.utils.shuffle,但它返回一个新矩阵,因此对于一个非常大的稀疏矩阵,改组不是就地完成,而是复制矩阵。

numpy.random.Generator.shuffle,不过好像是work only for CSR matrices

如何有效地打乱 scipy 稀疏矩阵的行,无论用于将其存储在内存中的格式是什么?

【问题讨论】:

    标签: numpy matrix random scipy shuffle


    【解决方案1】:

    我正在将我的 cmets 合并为一个答案。这不是一个解决方案,但编辑更容易。

    如果你希望找到一个高效的行洗牌而不考虑稀疏格式,那么你对稀疏矩阵文档的研究还不够。只有csrlil 以面向行的方式存储它们的数据。

    我可以想象使用lil 格式进行就地行洗牌。虽然csr 以面向行的方式存储数据,但行洗牌会更加复杂,并且难以就地进行。

    跟踪scikit shuffle,我发现它只是归结为matrix[index,:](其中index 是一个没有替换的采样)。这与 CSR 链接中的相同。值得一提的是,CSR 索引实际上使用矩阵乘法,使用特殊构造的“提取器”矩阵。

    混洗列表相对有效,无论是否就地,因为它只涉及创建一个新的指针/引用列表到行列表。密集 numpy 数组的行洗牌需要复制所有数据。它可以在编译后的代码中完成,但它仍然需要足够的缓冲区空间来存储整个副本。

    【讨论】:

      猜你喜欢
      • 2020-12-07
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 2012-06-30
      相关资源
      最近更新 更多