2015-06-01 151 views
0

我正在處理一些tif文件,我必須根據.tif文件繪製溫度與植物指數之間的依賴關係。這只是供參考。現在我的編程問題。 我使用python 2.7(x64)。 我有大的ndarray形式NumPy lib,包含temerature的值和second(相同大小)與植被idex。 mergedmask是我的掩碼(與其他數組相同),其中False值表示它是有效數據。檢索np.ndarray中最小值和最大值的索引

maxTS = np.amax(toa[mergedmask==False]) 
minTS = np.amin(toa[mergedmask==False]) 
maxVI = np.amax(ndvi1[mergedmask==False]) 
minVi = np.amin(ndvi1[mergedmask==False]) 

在上部將變量i具有TS(溫度)和VI(植被指數)的最小值和最大值。一切都好。我很開心。現在我必須在toandvi1陣列中找到座標。所以我使用這個:

ax,ay = np.unravel_index(ndvi1[mergedmask==False].argmin(),ndvi1.shape) 

爲了簡化我的味精,我只專注於minVI。上行返回2個索引。然後:

newMinVi = ndvi1[ax][ay] 

應分配給newMinVi相同的值minVi。但事實並非如此。我查看了像ax-1, ax+1, ay-1,ay+1這樣的索引,並且它們都不甚接近我的minVi值。你有任何想法來獲得我的minVi價值的協調。

回答

0

ndvi1[mergedmask==False].argmin()將給出ndvi1[mergedmask==False]中最小值的索引,即對應於mergedmaskFalse的地方的新陣列的索引。

這裏的問題是,ndvi1[mergedmask==False]不是真的面具。它選擇符合條件的那些值ndvi1,並將這些值組裝到一個新的一維數組中。例如,請檢查ndvi1[mergedmask==False].size是什麼,並將其與ndvi1.size進行比較。

你可能想要做什麼是創建一個真正的屏蔽數組:

ndvi1_masked = np.ma.masked_array(ndvi1, (mergedmask==False)) 
ax, ay = np.unravel_index(ndvi1_masked.argmin(), ndvi1.shape) 

希望這有助於!

0

幾乎我想要的。

ndvi1_masked = np.ma.masked_array(ndvi1, (mergedmask==False)) 

蒙面相當好,但不是這個值我想要的。我只需要改變聲明mergedmask==False,最後我得到:

myNdviMasked = np.ma.masked_array(ndvi1,(mergedmask!=False)) 
bx, by = np.unravel_index(myNdviMasked.argmin(), myNdviMasked.shape) 

感謝您的幫助:)