如何有效地打乱scipy稀疏矩阵,无论其格式如何



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

有一个scikitlearn.utils.shuffle,但它返回一个新的矩阵,因此对于一个非常大的稀疏矩阵,shuffle不会在适当的位置进行,而是复制矩阵。

有numpy.random.Generator.shuffle,但它似乎只适用于CSR矩阵。

如何有效地打乱scipy稀疏矩阵的行,不管它在内存中使用什么格式?

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

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

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

通过scikitshuffle进行跟踪,我看到它只归结为matrix[index,:](其中index是一个没有替换的采样(。这与CSR链接中的相同。值得一提的是,CSR索引实际上使用了矩阵乘法,使用了一个专门构建的"提取器"矩阵。

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

最新更新