我在matlab中有一个大小为2000万到2000万的稀疏矩阵。我想从这个矩阵中获得大约40000个特定行。
如果我这样做
new_data = data_original(index,:)
其中index由我感兴趣的行组成,它需要永远。
我怎样才能有效地做到这一点?
答案 0 :(得分:1)
MATLAB似乎对其稀疏矩阵使用坐标列表(COO)格式。在MATLAB的COO格式中,元素首先按列索引排序,然后按相同列索引的元素之间的原始索引排序。因此,每次使用行索引指定元素时,MATLAB都必须搜索稀疏矩阵的整个索引,以获得具有正确行索引的元素。
如果您可以将原始矩阵作为其转置加载,然后访问稀疏矩阵的列,即
,那么速度会快得多。new_data = data_transpose_of_original(:,index)
但是,不要在MATLAB中转置原始矩阵,因为这需要更长的时间。
或者您可以创建自己的稀疏矩阵格式。压缩稀疏行(CSR)格式对于行方式访问非常快。
总之,如果你可以在MATLAB之外改变稀疏矩阵的格式(转换原始矩阵,或者将其转换为CSR格式并创建一个MATLAB函数来加载/操作它。)。然后,您可以更快地访问该元素。否则我无法想到任何加速。