2012-08-06 58 views
0

在我的程序中,我需要在循環超過1000次的函數內使用大約500x500至1500x1500的數組。在每次迭代中,我需要從具有相同形式的數組開始(其維數在所有迭代中都是固定的)。的初始值將是:重新分配/刪除numpy數組與循環中的新分配

[0 0 0 ... 1] 
[0 0 0 ... 1] 
.... 

然而,陣列的內容將在循環內進行修改。什麼是將數組「重置」爲這種格式的最有效方式,所以我可以每次都將相同的數組傳遞給函數,而不必每次都分配一組新內存。 (我知道行的被修改的範圍)

我曾嘗試:

a[first_row_modified:last_row_modified,:] = 0. 
a[first_row_modified:last_row_modified,:-1] = 1. 

,但它需要的時間大致相同量的只是用下面的每次創建一個新的數組:

a = zeros((sizeArray, sizeArray)) 
a[:,-1] = 1. 

有沒有更快的方法來有效地「擦除」數組,並將最後一列更改爲數組?我認爲這與這個問題類似,clearing elements of numpy array,雖然我的數組不改變大小,我沒有看到以前提出的問題的權威答案。

+2

你有沒有做過任何分析?重置陣列是否佔用了大量的處理時間? – Luke 2012-08-06 18:18:21

+0

只是出於好奇你有沒有分析你的代碼,這是否需要大量的時間?在我的機器上做這1000次的時間少於2秒。 – 2012-08-06 19:24:48

+0

我已經分析了代碼。大部分時間都是在與MKL相關的numpy中花費線性代數。我已經優化了其他所有內容,但在配置文件中,它表示3%的時間用於零功能。 – user1554752 2012-08-06 19:47:02

回答

0

否;我認爲你做這件事的方式和它的速度一樣快。