一個小的改善,我可以很容易地看到,而不是下一個,:
for tup in tups:
x[tup[1],tup[0]] = x[tup[1],tup[0]] + 1
嘗試做
for tup in tups:
x[tup[1],tup[0]] += 1
因爲這將覆蓋相同的內存ADRESS,而不是創建一個新的內存現貨(注意:在這種情況下,這可能只會導致邊際加速,但如果您使用相同的技巧A + = B而不是C = A + B,在A和B爲一個Gb的numpy ndarrays每個左右,它實際上是一個巨大的加速)
爲什麼你閱讀元組的東西?你是不是應該首先閱讀它作爲一個numpy的ndarray,而不是將它作爲一個元組列表讀取,而不是改變爲一個numpy數組?你在哪裏創建元組列表?如果可以避免這種情況,那麼避免使用元組列表會更好,而不是創建它,並且以後再交換到一個numpy解決方案?
編輯:所以我只想告訴你這個加速,你可以通過+ =得到,同時問你爲什麼有一個大的元組列表,但是這太長了,以至於無法將這兩個東西放在評論中
另一個問題:我是否正確地假設你的元組可以有多個重複?像
tups = [(1,0), (2,4), (1,0), (1,2), ..., (999, 999), (992, 999)]
因此,在您的endresult,其他值比0和1將存在?或者是你的結果數組只存在一個和零的數組?
「對於大量的點~10^6 ...」 - 你的意思是1000 * 1000的圖片?它真的需要幾個小時嗎? – zhangxaochen
不,我的意思是有10^6或更高元組的tups。我想我可能會遇到另一個讓它放慢速度的問題。 –
@ medPhys-pl這可能會有所幫助:[增加Numpy多重數組與重複索引](http://stackoverflow.com/questions/7433142/increment-numpy-multi-d-array-with-repeated-indices) –