我正在对一个相当大的数据集进行一些时空分析(使用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))。然后,脚本必须打开,数据处理,然后在每次迭代时关闭文件夹中的特定文件。
答案 0 :(得分:1)
因为你的计算是在整个时间序列上计算的,所以我建议将这些数据存储在3000x8760向量中并以这种方式进行计算。
您的访问将更加缓存。
您可以使用重塑功能重新格式化数据:
newdata = reshape(olddata,50*60,8760);
现在,您需要访问olddata(i,j,:)
。
newdata(sub2ind([50 60],i,j),:)
答案 1 :(得分:0)
在做了一些实验之后,很明显第二个命题有3000个不同的文件比操纵工作区中加载的大数组要慢得多。但是我没有尝试在计算之前加载工作空间中的所有3000个文件(很多)。
看起来像重塑数据有点帮助了。
感谢所有贡献者的建议。