【问题标题】:Method to store very large data structures in MatlabMatlab中存储超大数据结构的方法
【发布时间】:2014-04-15 10:38:01
【问题描述】:

我有 6000 个英格兰的起点-终点位置对。对于每一对,我需要找到从起点到终点的最短路径。最短路径算法将底层道路网络的每个链路的详细信息(节点纬度和经度、道路链路长度和唯一 ID)和一个 OD 对作为输入。

底层道路网络上的链接数为 4091065。我读取道路网络并将其存储在一个结构数组中,每个元素代表一个链接,并将其保存在 .mat 文件中。如您所见,数据量太大,Matlab 内存不足。

我会很感激能解决这个问题的方法。增加内存似乎没有多大帮助。

谢谢

【问题讨论】:

    标签: arrays matlab memory structure


    【解决方案1】:

    我认为最好的方法是根本不在 Matlab 中进行 - 使用数据库。

    如果必须是 Matlab,也许您可​​以以某种方式对数据进行分区 - 也许在县左右。很确定您也可以找到一种方法来为每个特定请求排除大量节点。

    【讨论】:

      【解决方案2】:

      最短路径算法将细节(节点纬度)作为输入 和经度,道路链接长度和唯一ID)的每个链接 底层道路网络和一对 OD。

      当然,您可以限制需要加载的路网数量。不需要所有 4091065 链接 - 如果您从 Truro 到伦敦,最短的路径不太可能绕道约克。

      因此,您可以编写一个预处理器,而不是只有一个文件,它可以决定给定 OD 对所需的道路网络子集,并将其加载到您需要的格式中(可以选择将该子集存储在 ' *.mat' 文件或其他格式,如果您认为您想在相同数据上尝试算法的一些变体)。

      【讨论】:

      • 感谢 nkjt。是的,我确实想到了这个选项,但不确定如何对网络进行分区,并且它必须是每个 OD 对的预处理步骤。
      • 您可以预处理成粗略的地图网格,然后根据配对加载看起来合适的子集。很大程度上取决于您的算法如何工作以及数据的结构。我也很想修剪数据库(它是否包含任何死路链接,如果它们是起点或目的地,它们只会成为答案的一部分?)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多