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

Bil*_*ham 2 matlab data-structures

在MATLAB中处理点云数据时遇到"数据过载"问题.这就是我目前正在做的事情:

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

    到现在为止还挺好.现在事情变得复杂了:

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

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

    testset_feature_type_A_5x5_0.2x0.2_alpha_3_beta_4.mat

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

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

所以我的问题是:

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

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

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

Jon*_*nas 5

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

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

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

  • +1我和@Jonas一起,为了速度和简单性,很难在每个matfile中存储一个数据集.您需要的是将加载和保存抽象为一组访问函数.我个人不喜欢Matlab中的类,只是使用一些函数. (3认同)