【问题标题】:How to efficiently shuffle a scipy sparse matrix, whatever its format?如何有效地洗牌一个 scipy 稀疏矩阵,无论其格式如何?
【发布时间】:2021-03-13 16:12:12
【问题描述】:
【问题讨论】:
标签:
numpy
matrix
random
scipy
shuffle
【解决方案1】:
我正在将我的 cmets 合并为一个答案。这不是一个解决方案,但编辑更容易。
如果你希望找到一个高效的行洗牌而不考虑稀疏格式,那么你对稀疏矩阵文档的研究还不够。只有csr 和lil 以面向行的方式存储它们的数据。
我可以想象使用lil 格式进行就地行洗牌。虽然csr 以面向行的方式存储数据,但行洗牌会更加复杂,并且难以就地进行。
跟踪scikit shuffle,我发现它只是归结为matrix[index,:](其中index 是一个没有替换的采样)。这与 CSR 链接中的相同。值得一提的是,CSR 索引实际上使用矩阵乘法,使用特殊构造的“提取器”矩阵。
混洗列表相对有效,无论是否就地,因为它只涉及创建一个新的指针/引用列表到行列表。密集 numpy 数组的行洗牌需要复制所有数据。它可以在编译后的代码中完成,但它仍然需要足够的缓冲区空间来存储整个副本。