首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从文件中读取稀疏矩阵

从文件中读取稀疏矩阵
EN

Stack Overflow用户
提问于 2013-10-26 03:14:03
回答 1查看 987关注 0票数 0

我在幂迭代算法中使用了稀疏矩阵的耶鲁表示,一切都进行得很快。

但是,现在我有了一个问题,我的教授会把稀疏矩阵发送到一个无序的数据文件中,因为这个矩阵是对称的,所以只有一对索引会出现。

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

我试着读了一些东西,然后插入到我的稀疏矩阵中:

1)使用稠密矩阵。

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

3)优先级队列,我制作了一个priority_queues数组。我在priority_queuei中插入元素i,j,所以当我弹出priority_queuei时,我取了行i中最低的j-索引。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-26 08:09:53

许多稀疏加载程序的工作方式是使用中间纯三元组结构。也就是说,不管文件是什么样子的,都可以加载到类似于vector< tuple< row, column, value> >的东西中。

然后就可以构建稀疏的结构了。原因恰恰是你遇到了什么。稀疏矩阵结构可能有约束,比如您需要知道每一行/列中的元素数,或者输入需要排序等等。您可以将您的三元组数组按需要进行调整(即通过排序)。

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19602402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档