簡體   English   中英

循環訪問大數據集時提高性能

[英]Improving performance when looping in a big data set

我正在使用相當大的數據集進行時空分析(使用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))。 然后,該腳本將必須打開,進行數據處理,然后在每次迭代時關閉文件夾中的特定文件。

由於您的計算是在整個時間序列上進行的,因此建議將數據以這種方式存儲在3000x8760向量中,然后以這種方式進行計算。

這樣,您的訪問將對緩存更加友好。

您可以使用reshape函數重新格式化數據:

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

現在,您無需訪問olddata(i,j,:) ,而需要訪問newdata(sub2ind([50 60],i,j),:)

經過一些實驗后,很明顯第二個命題包含3000個不同的文件比必須處理工作區中加載的大數組要慢得多。 但是在計算之前,我沒有嘗試將所有3000個文件加載到工作區中(一點點)。

看起來“重塑數據幫助”有點。

感謝所有貢獻者的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM