[英]Improving performance by avoiding python for cycle when using counts of numpy unique
[英]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.