在数组中定位NaN和Inf值
22982 为本文评分:
5.0
在数组中定位NaN和Inf值
匿名作者 2013年4月11日,星期四
(由于我正在2013年NOAA卫星会议上学习大量知识,本周的帖子比较简短!) 无处不在的 WHERE 函数可用于快速定位数组中的值。然而,你不能直接搜索IEEE NaN(非数字)和 Inf(无穷大)值的位置;为此,你需要使用 FINITE 函数。这里有一个例子。从一个简单的数组开始:
IDL> a = findgen(5, 2)
IDL> print, a
0.000000 1.00000 2.00000 3.00000 4.00000
5.00000 6.00000 7.00000 8.00000 9.00000
并在最多三个随机位置添加NaN值:
IDL> i = floor(randomu(seed, 3)*n_elements(a))
IDL> a[i] = !values.f_nan
IDL> print, a
0.000000 1.00000 2.00000 3.00000 NaN
NaN 6.00000 7.00000 NaN 9.00000
好的,那么NaN值在哪里呢?通过肉眼观察,我可以看到它们的位置(索引4、5和8),但要通过编程方式识别它们,请将WHERE与FINITE以及"~"(逻辑非运算符)一起使用:
IDL> i_nan = where(~finite(a), /null)
IDL> print, i_nan
4 5 8
检查完毕!