首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在大数据集中循环时提高性能

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

Stack Overflow用户
提问于 2014-02-24 16:43:26
回答 2查看 62关注 0票数 1

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

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

我分析的总体结构如下:

代码语言:javascript
复制
 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))。然后,脚本必须打开数据处理,然后在每次迭代时关闭文件夹中的一个特定文件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-25 22:43:56

在做了一些实验之后,很明显,包含3000个不同文件的第二个命题比处理加载在工作区中的大数组要慢得多。但在计算之前,我并没有尝试加载工作区中的所有3000个文件(有点夸张)。

看起来重塑数据的帮助有点小。

感谢所有撰稿人的建议。

票数 0
EN

Stack Overflow用户

发布于 2014-02-24 19:08:18

因为您的计算是在整个时间序列上计算的,所以我建议用3000x8760向量存储数据,然后用这种方式进行计算。

这样,您的访问就会更加方便缓存。

您可以使用reshape函数重新格式化数据:

代码语言:javascript
复制
newdata = reshape(olddata,50*60,8760);

现在,您需要访问olddata(i,j,:),而不是访问newdata(sub2ind([50 60],i,j),:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21993675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档