zgyin的个人博客分享 http://blog.sciencenet.cn/u/zgyin

博文

将fits数据中的NaN替换为随机数

已有 3235 次阅读 2012-12-11 03:11 |个人分类:idl使用方法|系统分类:科研笔记

如上图所示在fits数据中存在NaN值,不利于接下来的数据处理,下面的小程序,可以把NaN替换掉,例如替换为-10
pro replace
im = readfits("F:dataRMS.fits",Header)
for i=0,n_elements(im[*,1])-1 do begin
       for j=0,n_elements(im[1,*])-1 do begin
            if finite(im[i,j]) eq 0 then begin
            im[i,j]=-10
            endif
       endfor
endfor
WRITEFITS,"F:dataRMS1.fits", im, Header
end
其中如果im[i,j]的值是NaN,那么finite(im[i,j])的值是0,之后用WRITEFITS将数据重新写入fits文件。
用fv查看,可以看到原来值为NaN的地方都替换为了-10
如果想把null替换为均匀分布的伪随机数只需要im[i,j]=randomu(seed,1)
 
如果想把null替换为均匀分布的伪随机数只需要im[i,j]=randomu(seed,1)
我个人认为这样去替换数据:im[i,j]=mean(im)+staddev(im)*randomu(seed,1)
这样的话程序可以改为 
pro replace
n=1l
im = readfits("F:dataRMS.fits",Header)
for i=0,n_elements(im[*,1])-1 do begin
       for j=0,n_elements(im[1,*])-1 do begin
       if finite(im[i,j]) ne 0 then begin
n=n+1
         endif
     endfor
endfor
;n是用来统计所有值不为NULL的个数,下面会建立个数为n的数组a
a=dblarr(n)
m=0l
im = readfits("F:dataRMS.fits",Header)
for i=0,n_elements(im[*,1])-1 do begin
       for j=0,n_elements(im[1,*])-1 do begin
       if finite(im[i,j]) ne 0 then begin
a[m]=im[i,j]
m++
         endif
     endfor
endfor
;函数mean()用来求数组a的平均值,stddev()用来求标准偏差
mean=mean(a)
stddev=stddev(a)
im = readfits("F:dataRMS.fits",Header)
for i=0,n_elements(im[*,1])-1 do begin
       for j=0,n_elements(im[1,*])-1 do begin
       if finite(im[i,j]) eq 0 then begin
       im[i,j]=mean+randomu(seed,1)*stddev 
       endif
     endfor
endfor
 
WRITEFITS,"F:dataRMS11.fits", im, Header
end       
 
 
还有如果将小于一定值的数替换掉例如把小于2.0的数替换掉需要这样写
         if finite(im[i,j]) ne 0 then begin
              if im[i,j] lt 2.0 then begin
                endif
            endif
如果写成if finite(im[i,j]) ne 0 and im[i,j] lt 2.0 then begin
会有错误提示“%Program caused arithmetic error: Floating illegal operand”


https://wap.sciencenet.cn/blog-783377-641358.html

上一篇:将fits文件的扩展写入新的fits文件,再转化为ndf格式的文件
下一篇:starlink中的cupid的使用方法(二)
收藏 IP: 202.101.72.*| 热度|

0

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

数据加载中...

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

GMT+8, 2023-1-28 21:34

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部