【问题标题】:Read from file a sparse-matrix从文件中读取稀疏矩阵
【发布时间】:2013-11-05 07:30:58
【问题描述】:

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

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

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

我尝试阅读一些东西,然后插入我的稀疏矩阵:

1) 使用密集矩阵。

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

3) 优先队列,我做了一个priority_queues数组。我将元素 i,j 插入到 priority_queue[i] 中,所以当我弹出 priority_queue[i] 时,我会采用 i 行的最低 j-index。

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

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

【问题讨论】:

  • 在他发送数据时读取数据然后将其重新格式化为您的格式怎么样?

标签: c++ sparse-matrix


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 2012-01-10
    • 2014-08-17
    • 1970-01-01
    • 2018-01-19
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多