在MATLAB中使用大型结构阵列提高保存/加载性能

时间:2016-06-11 21:43:24

标签: arrays performance matlab serialization

我有一个非常大的结构数组(超过100k结构)必须保存到文件中。之后,必须一次加载和处理这些。目前的方法是仅使用save来保存它。这需要大约8秒才能保存,大约需要100秒才能加载。

我尝试了几种方法来加快速度:

  1. -v6标记与save一起使用。这加快了速度,但并不显着。

  2. 分别使用getByteStreamFromArray()getArrayFromByteStream()进行序列化和反序列化。这没有效果。具体来说,序列化和反序列化只需要保存和加载就可以了。

  3. (仍在处理此问题)序列化数组,保存,加载,然后仅处理每个结构(而不​​是整个数组)的反序列化

  4. 在这种情况下,有没有人有任何改善表现的建议?这似乎是一个普遍的问题。

1 个答案:

答案 0 :(得分:1)

我相信getByteStreamFromArray()getArrayFromByteStream()save()load()使用,因此您的结果对我来说并不是很令人惊讶。使用手工制作的序列化函数可以获得更好的性能,这些函数可以爬下你的结构并只保存真正需要的东西。通过压缩保存的数据可以实现额外的保存。您可以在此处阅读一些实施提示:http://undocumentedmatlab.com/blog/improving-save-performance

注意#1 - 基于Matlab版本,数据和平台的YMMV

注意#2 - 对于不了解这一点的读者,getByteStreamFromArray()getArrayFromByteStream()都是未记录的Matlab函数。这里提供了他们行为的唯一[非官方]解释,AFAIK:http://undocumentedmatlab.com/blog/serializing-deserializing-matlab-data