在矩阵

时间:2016-11-11 13:02:13

标签: bash perl matrix processing-efficiency

我有很多矩阵,大约有1,000,000,000行,10列。它们每个需要大约100G存储空间,大约2.5分钟才能计算出行数,所以我需要高效地处理它们的时间和资源。

最重要的列是#1和#2和#10。在一个示例矩阵中,#1中有大约2,000,000个唯一条目,#2中有大约10,000,000个条目。所有#1条目都存在于#2中,但并非所有#2条目都存在于#1中。

我想请教您如何有效地找到第1列和第2列之间存在相反情况的所有情况。换句话说:找到#1和#2之间存在#1-#2和#2-#1的所有对。

一旦找到每个案例,我都需要对#10做一些事情。

我可以想到几种方法,但没有测试任何方法。

  • 我可以预先处理文件并存储所有唯一的#1条目和#2条目,并在浏览文件之前组合它们。

  • 我可以通读文件并收集对,创建相反的案例并存储在某种哈希中以供将来查找。然而,这会使哈希变得相当大,并且需要两次遍历文件。

  • 我可以通读文件并收集对,按字母顺序排列对(所以总是A-B)并将数据存储在哈希中。在我阅读文件时,快速查找以前的事件。

  • 我也可以尝试使用gdbm。

您认为最佳解决方案是什么?

任何其他建议都将受到赞赏。

0 个答案:

没有答案