在分析过程中如何存储我的大型MATLAB数据文件?

时间:2011-01-21 15:37:18

标签: matlab data-structures

我在MATLAB中处理point cloud数据时遇到“数据过载”问题。这就是我目前正在做的事情:

  1. 我从原始数据文件开始,每个文件大约为〜30Mb。
  2. 然后我对它们进行初始处理以提取n个单独的对象并移除外围点,这些点全部合并为1 xn结构testset,保存到testset.mat(~100Mb)

    到目前为止一切顺利。现在事情变得复杂了:

  3. 对于testset中每个对象中的每个点,我将计算一些特征中的一个,最终成为某个大小的矩阵(对于每个点)。矩阵的大小和计算的一些其他属性是计算的参数。我将这些计算出的特征保存在1 x n单元格数组中,每个单元格包含每个点的矩阵数组。

    然后我将此单元格数组保存在.mat文件中,其中名称指定参数,使用的测试数据的名称以及提取的要素类型。例如:

    testset_feature_type_A_5x5_0.2x0.2_alpha_3_beta_4.mat

  4. 现在,对于这些文件中的每一个,我都会进行一些进一步的处理(使用分类算法)。再次设置更多参数。

  5. 所以现在我处于一个棘手的情况,初始数据的每一个最后一段都经过了一些路径,但所采用的路径(以及沿该路径设置的参数)本身并不是数据本身。

    所以我的问题是:

    有更好的方法吗?任何在MATLAB中使用大型数据集的经验的人都可以提出一种更有效,更整体地存储数据和参数设置的方法吗?

    理想情况下,我可以在不必对文件字符串使用正则表达式的情况下查找某个数据 - 但是还有动机将单独处理的文件分开以便在加载它们时保存系统内存(以及帮助防止腐败)。

    每次计算所花费的时间(约2小时)禁止“即时”计算数据。

2 个答案:

答案 0 :(得分:5)

对于类似的问题,我创建了一个类结构,它执行以下操作:

  • 每个对象都链接到原始数据文件
  • 对于每个处理步骤,都有一个属性
  • 属性的set方法将数据保存到文件中(与名称相同的目录中) 原始数据文件),存储文件名,并更新“status”属性以指示此步骤已完成。
  • 如果文件名已存储且状态显示为“done”,则属性的get方法将加载数据。
  • 最后,可以保存/加载对象,以便我现在可以进行一些处理,保存对象,稍后加载它,我立即知道特定数据集在处理管道中的距离。

因此,内存中唯一的数据是当前正在处理的数据,您可以轻松地知道哪个数据集处于哪个处理阶段。此外,如果将方法设置为接受对象数组,则可以进行非常方便的批处理。

答案 1 :(得分:1)

我不完全确定这是否是您所需要的,但save command允许您在单个.mat文件中存储多个变量。例如,如果参数设置存储在数组中,则可以将其与数据集一起保存在单个.mat文件中。加载文件后,数据集和带参数的数组都将恢复。

或者您是否希望能够在不加载文件的情况下加载参数?然后我个人会选择只有参数(但类似的文件名)的第二组文件的廉价解决方案。