2013-07-10 44 views
1

我有一個python腳本,它讀取兩個tiff圖像並查找唯一組合,計數觀察值並將計數保存到txt文件。爲陣列操作改進python性能

你可以找到完整的腳本in www.spatial-ecology.net

結果是:

tif1 

2 2 3 

0 0 3 

2 3 3 

tif2 

2 2 3 

3 3 4 

1 1 1 

result 

2 2 2 

3 3 1 

0 3 2 

3 4 1 

2 1 1 

3 1 2 

該腳本工作正常。 這是如何實現的。由線

  1. 讀取線(用於在順序在存儲器中(最終的標誌選項可以被插入到讀取10由10條線)

  2. 不加載完整圖像中的範圍irows(行):)
  3. 走線槽的陣列,並創建一個元組

  4. 檢查,如果元組已經存儲在DIC()

我的問題是: 這是在這種情況下加快這一過程的技巧?

我測試過將結果保存在2維數組而不是dic()中,但它減慢了過程。 我檢查this link,也許python地圖功能可以提高速度。 是這樣嗎?

在此先感謝 朱塞佩

+1

你應該明確地描述一下,就像下面Slater的回答一樣。但是Python中大多數數值較大的處理問題可以通過'numpy'解決。除此之外,您可以檢出Python Imaging Library(PIL)。這兩個庫都旨在有效解決這些問題。 – HardlyKnowEm

回答

2

如果您想對性能的一些實際的建議,你需要發佈你的代碼是直接有關你想要做什麼零件。如果你至少不會這樣做,那麼我們可以做的很少。也就是說,如果你在發現你的低效率的地方有問題,我會推薦使用python的cProfile模塊高度。用法如下:

import cProfile 

def foo(*args, **kwargs): 
    #do something 

cProfile.run("foo(*args, **kwargs)") 

這將打印您的代碼,它可以讓你知道你的代碼的步驟佔用了大部分時間的詳細時間曲線。通常情況下,它會被調用的次數比應該被調用的次數要多,或者做一些導致性能瓶頸的愚蠢的額外處理。

+0

您還可以使用[line_profiler](http://pythonhosted.org/line_profiler/)來逐行提供時間,而不是逐個函數。 –