Numpy - 用 NaN 替换数字
Posted
技术标签:
【中文标题】Numpy - 用 NaN 替换数字【英文标题】:Numpy - Replace a number with NaN 【发布时间】:2011-10-05 19:32:29 【问题描述】:我希望在 numpy 中用 NaN 替换一个数字,并且正在寻找一个类似 numpy.nan_to_num 的函数,但反向除外。
随着处理不同的数组,该数字可能会发生变化,因为每个数组都可以具有唯一定义的 NoDataValue。我见过人们使用字典,但是数组很大并且充满了正负浮点数。我怀疑尝试将所有这些都加载到任何东西中来创建密钥效率不高。
我尝试使用以下和 numpy 要求我使用 any() 或 all()。我意识到我需要明智地迭代元素,但希望内置函数可以实现这一点。
def replaceNoData(scanBlock, NDV):
for n, i in enumerate(array):
if i == NDV:
scanBlock[n] = numpy.nan
NDV 是 GDAL 的无数据值,array 是一个 numpy 数组。
掩码数组是否可行?
【问题讨论】:
我不确定我是否理解您提供的解决方案有什么问题。它不能正常工作吗? @Chris Gregg 这个解决方案需要一些缩进,不需要返回数组(因为它是就地的),应该避免使用array
作为变量以避免与np.array混淆,但最重要的是,与典型的 numpy 索引和广播相比,速度会非常慢。
@Paul 我关心的是速度,非常感谢下面的回答。我使用变量只是为了使代码更清晰,我也会避免使用数组。
【参考方案1】:
A[A==NDV]=numpy.nan
A==NDV 将生成一个布尔数组,可用作 A 的索引
【讨论】:
这是一个特殊的位序列,超出了所用数据类型的有效范围。它用于表示丢失的数据或未产生有效值的数学错误的结果。希望这会有所帮助:en.wikipedia.org/wiki/NaN 请注意A.min()
和A.max()
不是检查它是否有效的好方法,因为它们都会返回nan
...如果你想获得最小值/最大值,请使用np.nanmin(A)
和np.nanmax(A)
.以上是关于Numpy - 用 NaN 替换数字的主要内容,如果未能解决你的问题,请参考以下文章