2011-07-15 76 views
19

我正在用numpy替換NaN中的一個數字,並且正在尋找像numpy.nan_to_num這樣的函數,除了相反。Numpy - 用NaN替換一個數字

當處理不同的數組時,數字可能會發生變化,因爲每個數組都可以唯一地定義NoDataValue。我看到有人在使用字典,但是陣列很大,並且都有正面和負面的花車。我懷疑嘗試將所有這些加載到任何東西來創建密鑰是沒有效率的。

我嘗試使用以下和numpy要求我使用任何()或所有()。我意識到我需要迭代元素明智,但希望內置函數可以實現這一點。

def replaceNoData(scanBlock, NDV): 
    for n, i in enumerate(array): 
     if i == NDV: 
      scanBlock[n] = numpy.nan 

NDV是GDAL的無數據值,數組是一個numpy數組。

是一個蒙面陣列的方式可能嗎?

+1

索引,我不知道我知道什麼是錯的,你提供的解決方案布爾矩陣。它不能正常工作嗎? –

+0

@Chris Gregg這個解決方案需要一些縮進,不需要返回數組(因爲它是就地的),應該避免使用'array'作爲變量來避免與np.array混淆,但最重要的是,將會非常糟糕與典型的numpy索引和廣播相比較慢。 – Paul

+0

@Paul我的關注是速度,非常感謝下面的答案。我使用變量只是爲了使代碼更清晰,我也會避免使用數組。 – Jzl5325

回答

35
A[A==NDV]=numpy.nan 

A == NDV會產生可以用作

+0

是numpy.nan特殊值?我似乎無法通過Google發現... – alwaysaskingquestions

+1

這是一個特殊的比特序列,它超出了正在使用的數據類型的有效範圍。它用於表示丟失的數據或者未產生有效值的數學錯誤的結果。希望這有助於:https://en.wikipedia.org/wiki/NaN – Paul

+0

是的!謝謝 :) – alwaysaskingquestions

相關問題