首先,我將介紹我的目標和我的代碼來實現它我可以提高大量時間序列數據之間的相關性分析的計算速度嗎?
VALUE是表示2-d區域的時間變化的3-d numpy的陣列。 (例如
value[:1000,2,3] = list
[電網(X = 3,Y = 2)的值從0到1000]。)以我實際工作中,VALUE是在(2812,75的形狀90)PS:「2812」是4個月
某些時候,我叫選擇代表一個有趣的問題,我會在該地區的每一個網格做相關性分析的總和小時。
SELECT是熊貓數據幀包括每個感興趣點的X和Y
COV是3 d陣列作爲計數矩陣記錄中的每個的相關電平選擇點與每個網格點
設置截止皮爾遜係數RC = 0.75,
爲SE LECT點噸,
如果R(I,J)> RC ==> COV [T,I,J] = 1,否則COV [T,I,J] = 0
這是我的代碼,但它有點慢。我認爲這個過程的某些部分可以改進:
start = timeit.default_timer()
### SELECT is a pandas dataframe including each interesting point's X and Y
cov = np.zeros(len(SELECT)*VALUE.shape[1]*VALUE.shape[2]).reshape(len(SELECT), VALUE.shape[1],VALUE.shape[2])
for t in range(0,len(SELECT),1):
select_grid = pd.DataFrame(VALUE[:,SELECT.Y.iloc[t],SELECT.X.iloc[t]])
for i in range(0,VALUE.shape[1],1):
for j in range(0,VALUE.shape[2],1):
data_grid = pd.DataFrame(VALUE[:,i,j])
## Using corr to compute the correlation r
r_sg = select_grid[0].corr(data_grid[0])
if r_sg > 0.75:
cov[t,i,j] = 1
end = timeit.default_timer()
print end - start
您是否試圖運行分析器來查看時間花在哪裏?例如[本文](https://www.huyng.com/posts/python-performance-analysis)中描述的'line_profiler',只需向下滾動到「逐行....」部分即可。可能有助於闡明可以改進的方面。 –
你可以給出'len(SELECT),VALUE.shape [1],VALUE.shape [2]'和'end-start'的大小來估計可能的改進嗎?什麼是'ds_grid'?數據鏈接也是一個很好的工具。 –
謝謝!我不知道「定時上下文管理器」。如果可以,我會學習它。 –