从文件中读取稀疏矩阵

时间:2013-10-26 03:14:04

标签: c++ sparse-matrix

我在功率迭代算法中使用稀疏矩阵的耶鲁表示,一切顺利而快速。

但是,现在我遇到了问题,我的教授会将稀疏矩阵发送到无序的数据文件中,并且由于矩阵是对称的,因此只有一对索引存在。

问题是,在我的实现中,我需要按顺序插入元素。

我尝试了一些东西来读取并插入到我的稀疏矩阵之后:

1)使用密集矩阵。

2)使用另一个稀疏矩阵实现,我尝试使用std :: map。

3)优先级队列,我创建了一个priority_queues数组。我在priority_queue [i]中插入元素i,j,所以当我弹出priority_queue [i]时,我会获取行i的最低j-index。

但我需要一些非常快且内存效率高的东西,因为我将使用的最大矩阵将是100k x 100k,我所做的尝试是如此之慢,几乎比功率迭代本身慢200倍。

有什么建议吗?对不起英语不好:(

1 个答案:

答案 0 :(得分:0)

许多稀疏装载机的工作方式是使用中间纯三元组结构。即无论文件是什么样的,您都可以将其加载到vector< tuple< row, column, value> >

之类的内容中

然后从 构建稀疏结构。原因正是你遇到的。您的稀疏矩阵结构可能存在约束,例如您需要知道每行/每列中的元素数量,或者需要对输入进行排序等。您可以将三元组数组按到您需要的任何内容(即通过排序)。

这也使解决你的对称困境变得微不足道。对于源文件中的每个三元组,您将(row, column, value)(column, row, value)都插入到中间结构中。

另一种选择是简单地编写一个脚本来对教授的文件进行排序。

仅供参考,在稀疏的世界中,元素(非零)的数量是重要的,而不是矩阵的维数。 100k-by-100k是一条毫无意义的信息。例如,整个矩阵可能完全是空的。