2011-07-15 37 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

相关问题