我正在对一个相当大的数据集进行一些时空分析(使用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))。然后,脚本必须打开数据处理,然后在每次迭代时关闭文件夹中的一个特定文件。
发布于 2014-02-25 22:43:56
在做了一些实验之后,很明显,包含3000个不同文件的第二个命题比处理加载在工作区中的大数组要慢得多。但在计算之前,我并没有尝试加载工作区中的所有3000个文件(有点夸张)。
看起来重塑数据的帮助有点小。
感谢所有撰稿人的建议。
发布于 2014-02-24 19:08:18
因为您的计算是在整个时间序列上计算的,所以我建议用3000x8760向量存储数据,然后用这种方式进行计算。
这样,您的访问就会更加方便缓存。
您可以使用reshape函数重新格式化数据:
newdata = reshape(olddata,50*60,8760);现在,您需要访问olddata(i,j,:),而不是访问newdata(sub2ind([50 60],i,j),:)。
https://stackoverflow.com/questions/21993675
复制相似问题