在大数据集中循环时提高性能

时间:2014-02-24 16:43:27

标签: arrays performance matlab

我正在对一个相当大的数据集进行一些时空分析(使用MATLAB),我不确定在我的脚本的性能方面采用什么是最好的策略。

实际上,数据集分为10个年度维数(纬度,经度,时间)=(50,60,8760)。

我的分析的一般结构是:

 for iterations=1:Big Number  

  1. Select a specific site of spatial reference (i,j).   
  2. Do some calculation on the whole time series of site (i,j). 
  3. Store the result in archive array.

 end

我的问题是:

是否更好(就一般表现而言)

1)大年度(50,60,8760)数组中的所有数据作为全局变量加载一次。在每次迭代时,脚本都必须从这些数组中提取一个特定的“站点”(i,j,:)以进行数据处理。

2)存储在文件夹中的50 * 60个不同文件。每个文件包含特定的站点时间序列(维度向量(总时间范围,1))。然后,脚本必须打开,数据处理,然后在每次迭代时关闭文件夹中的特定文件。

2 个答案:

答案 0 :(得分:1)

因为你的计算是在整个时间序列上计算的,所以我建议将这些数据存储在3000x8760向量中并以这种方式进行计算。

您的访问将更加缓存。

您可以使用重塑功能重新格式化数据:

newdata = reshape(olddata,50*60,8760);

现在,您需要访问olddata(i,j,:)

,而不是访问newdata(sub2ind([50 60],i,j),:)

答案 1 :(得分:0)

在做了一些实验之后,很明显第二个命题有3000个不同的文件比操纵工作区中加载的大数组要慢得多。但是我没有尝试在计算之前加载工作空间中的所有3000个文件(很多)。

看起来像重塑数据有点帮助了。

感谢所有贡献者的建议。