如何有效地洗牌 scipy 稀疏矩阵,无论其格式如何?
How to efficiently shuffle a scipy sparse matrix, whatever its format?
如何打乱 scipy 稀疏矩阵的行?
有一个 scikitlearn.utils.shuffle,但它 returns 是一个新矩阵,因此对于一个非常大的稀疏矩阵,改组不是就地完成的,而是复制矩阵。
有numpy.random.Generator.shuffle, but it seems to work only for CSR matrices.
如何高效地打乱 scipy 稀疏矩阵的行,无论其在内存中使用何种格式存储?
我正在将我的评论合并为一个答案。这不是解决方案,但编辑更容易。
如果您希望找到一种不管稀疏格式如何都有效的行洗牌,那么您对稀疏矩阵文档的研究还不够。只有 csr
和 lil
以面向行的方式存储它们的数据。
我可以想象使用 lil
格式进行就地行洗牌。虽然 csr
以面向行的方式存储数据,但行洗牌会更加复杂,并且难以就地进行。
追踪 scikit
洗牌,我看到它只是归结为 matrix[index,:]
(其中 index
是没有替换的采样)。这与 CSR link 中的相同。就其价值而言,CSR 索引实际上使用矩阵乘法,使用专门构造的 'extractor' 矩阵。
改组列表相对有效,无论就地与否,因为它只涉及为行列表创建一个新的 pointers/references 列表。密集 numpy 数组的行洗牌需要复制所有数据。它可以在编译代码中完成,但它仍然需要足够的缓冲区 space 来完成整个副本。
如何打乱 scipy 稀疏矩阵的行?
有一个 scikitlearn.utils.shuffle,但它 returns 是一个新矩阵,因此对于一个非常大的稀疏矩阵,改组不是就地完成的,而是复制矩阵。
有numpy.random.Generator.shuffle, but it seems to work only for CSR matrices.
如何高效地打乱 scipy 稀疏矩阵的行,无论其在内存中使用何种格式存储?
我正在将我的评论合并为一个答案。这不是解决方案,但编辑更容易。
如果您希望找到一种不管稀疏格式如何都有效的行洗牌,那么您对稀疏矩阵文档的研究还不够。只有 csr
和 lil
以面向行的方式存储它们的数据。
我可以想象使用 lil
格式进行就地行洗牌。虽然 csr
以面向行的方式存储数据,但行洗牌会更加复杂,并且难以就地进行。
追踪 scikit
洗牌,我看到它只是归结为 matrix[index,:]
(其中 index
是没有替换的采样)。这与 CSR link 中的相同。就其价值而言,CSR 索引实际上使用矩阵乘法,使用专门构造的 'extractor' 矩阵。
改组列表相对有效,无论就地与否,因为它只涉及为行列表创建一个新的 pointers/references 列表。密集 numpy 数组的行洗牌需要复制所有数据。它可以在编译代码中完成,但它仍然需要足够的缓冲区 space 来完成整个副本。