1.变量类型
2.NaN问题
3.字符串操作
4.IDL求解对数
1.变量类型
表2是如何定义一个数组的变量类型,表1是如何定义一个数的变量类型
2.NaN问题
1. 替换数组中的NaN
数组中的NaN时常会造成计算中的麻烦,所以一般把它们替换为一些特别的数,比如-999.9。
IDL>bad=where(finite(data) eq 0,count)
IDL>if(count gt 0) then data(bad)=-999.9
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 IDL> print,mean(a)
NaN
IDL> print,mean(a,/nan)
2.00000
IDL> print,total(a)
NaN
IDL> print,total(a,/nan)
NaN 3.00000
4.00000
3、 移除数组中的NAN
关键在于判断该值的位置,可以利用finite和where函数。
IDL> print,a
NaN 1.00000 NaN 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
3.00000
3.字符串的操作
2010-05-14 22:34:00| 分类: 默认分类 |举报|字号 订阅
idl提供了很多进行字符串操作的函数,下面一一介绍
1.strlen()
计算字符串的长度,空字符串返回零
字符串中的空格也算做一个字符,无论空格在字符的前、后还是中间。
2.strtrim(字符串,n)
去掉字符串中的空格,n=0,表示去掉尾部空格,n=1去掉前部空格,n=2 前部和后堡空格都去掉
3.strmid(字符串,n1,n2,/reverse_offset)
从字符串的n1个位置开始,取出n2个字符的子字符串,若省略n2,则读到字符串的末尾,/reverse_offset指从尾部算起
空格、小数点也算作一个字符,print,strmid(‘ni hao’,1,3) 输出i h
print,strmid('65000.12',5,2) 输出.1
从n1个位置开始,其实n1个数是不算的,后一个值才开始。也可以理解为字符是从0开始算起
4.strjoin([字符串1,字符串2,字符串n],分隔符)
将字符串用分隔符连接起来,如果没有设定分隔符则直接连接
print,strjoin(['a','b'],'$+$+c+d')输出a$+$+c+db$+$+c+dc
print,strjoin(['a','b','d'],':') 输出 a:b:d
5.strsplit
根据指定的定界符把字符串分割成子串,默认的定界符为空格或tab
6.strput,字符串1,字符串2,n
用字符串2从第n个位置开始替换字符串1中的字符,并保持字符串1的长度不变
strput,‘000’ ,‘26’,1 输出 026 ;用b从第2个位置来代替c
7.strupcase和strlowcase
将字符串中的所有大写(小写)字母换成小写(大写)字符,其他非字母字符不转换
8.strcompress(字符串,/remove_all)
去除单词间多于一个的空格,/remove_all会删除所有空格
如 print,strcompress('i love you') 输出i love you
9.strcmp
比较字符串是否相同
10.strpos (字符串1,字符串2)
检测字符串2是否在字符串1中出现,若出现返回出现的位置,否则返回-1
此外还有systime是返回当前的系统日期
10.strsplit
根据设定的界定符号来划分字符串
比如
print,strsplit('C:\\DocumentsandSettings\\Administrator\\can_tmr.img','.',/extract)
C:\\DocumentsandSettings\\Administrator\\can_tmr img
这里它是将'C:\\DocumentsandSettings\\Administrator\\can_tmr.img'利用.分成了
两部分
C:\\DocumentsandSettings\\Administrator\\can_tmr和img
但是如果没有界定符的话,默认的界定符为空格或者tab
如 print,strsplit('C:\\Documents and
Settings\\Administrator\\can_tmr.img',/extract)
C:\\Documents and Settings\\Administrator\\can_tmr.img
这里其实包括了三个字符串Settings\\Administrator\\can_tmr.img
C:\\Documents、and以及
最后到底分成了几个字符串,可以设置关键字count来计算
如print,strsplit('C:\\Documents and
Settings\\Administrator\\can_tmr.img',count=n,/extract),n
C:\\Documents and Settings\\Administrator\\can_tmr.img
3
如果次命令没有设置/extract关键字,那么输出的结果是分割符号所处的位置
如print,strsplit('C:\\Documents and
Settings\\Administrator\\can_tmr.img',count=n),n
0 13 17
3
4.IDL求解对数
1、以10为底的对数叫常用对数,简记为lgN。在IDL中使用ALOG10()函数。
2、以无理数e(e=2.718 28…)为底的对数叫做自然对数,简记为lnN。在IDL中使用ALOG()函数。
3、对于任意数为底的对数,则利用相关性质求解
log(a)(N)=loglog(b)(N)/loglog(b)(a)
例子:求 log(2)(64)
IDL>print, ALOG10(64)/ ALOG10(2)
或者:IDL>print, ALOG (64)/ ALOG (2)
因篇幅问题不能全部显示,请点此查看更多更全内容