Numpy 如何有效地洗牌scipy稀疏矩阵,无论其格式如何?

Numpy 如何有效地洗牌scipy稀疏矩阵,无论其格式如何?,numpy,matrix,random,scipy,shuffle,Numpy,Matrix,Random,Scipy,Shuffle,如何洗牌scipy稀疏矩阵的行 有一个,但它返回一个新的矩阵,因此对于一个非常大的稀疏矩阵,洗牌不会在适当的位置进行,而是复制矩阵 有,但似乎有 如何有效地洗牌scipy稀疏矩阵的行,无论使用何种格式将其存储在内存中?我正在将我的评论整合到一个答案中。这不是一个解决方案,但编辑更容易 如果希望找到一种高效的行洗牌,而不考虑稀疏格式,那么您对稀疏矩阵文档的研究还不够。只有csr和lil以面向行的方式存储数据 我可以想象使用lil格式执行就地行洗牌。当csr以面向行的方式存储数据时,行洗牌将更加复杂

如何洗牌scipy稀疏矩阵的行

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

有,但似乎有


如何有效地洗牌scipy稀疏矩阵的行,无论使用何种格式将其存储在内存中?

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

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

我可以想象使用
lil
格式执行就地行洗牌。当csr以面向行的方式存储数据时,行洗牌将更加复杂,并且很难在适当的位置执行

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

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