LearningENVI&IDL分享 http://blog.sciencenet.cn/u/dongyanqing Learning ENVI&IDL

博文

IDL中数据处理时遇到了NAN怎么办

已有 10283 次阅读 2011-10-22 20:52 |个人分类:IDL技术|系统分类:科研笔记| Finite, IDL, Where, Nan

     对NAN的问题,曾经发过几篇文章作初步探讨如《IDL下的NAN》,《Envi下的特殊值替换扩展补丁》和《ENVI下修改影像中NAN的方法》。

参考http://hi.baidu.com/dyqwrp/blog/item/c75b38386c4a61ced56225f9.html

http://hi.baidu.com/dyqwrp/blog/item/74f7505880f1929b800a18bb.html

http://hi.baidu.com/dyqwrp/blog/item/27899f17bfefd71a4a90a79b.html

唯独没有详细的单独说下IDL下遇到NAN时候的处理。

1、 NaN的出现原因

浮点数0除以0的时候。

IDL> print,1./0

          Inf

% Program caused arithmetic error: Floating divide by 0

IDL> print,0./0

         -NaN

 

2、 统计或分析时避开NAN

调用函数是加NaN关键字,几乎所有的IDL统计和分析函数都有此关键字。

IDL> a = findgen(4)

IDL> a[0]='nan'

IDL> a[2]='nan'

IDL> print,a

          NaN      1.00000          NaN      3.00000

IDL> print,mean(a)

          NaN

IDL> print,mean(a,/nan)

      2.00000

IDL> print,total(a)

          NaN

IDL> print,total(a,/nan)

      4.00000

 

3、 移除数组中的NAN
关键在于判断该值的位置,可以利用finitewhere函数。

IDL> print,a

          NaN      1.00000          NaN      3.00000

IDL> print,finite(a)

   0   1   0   1

IDL> newa = a[where(finite(a))]

IDL> print,newa

      1.00000      3.00000

IDL> a[where(~finite(a))] = -9999

IDL> print,a

     -9999.00      1.00000     -9999.00      3.00000

 



https://blog.sciencenet.cn/blog-344887-499860.html

上一篇:IDL下实现ENVI的波段运算表达式语句合理性检测
下一篇:IDL中生成随机数
收藏 IP: 121.18.236.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-23 10:52

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部