您的当前位置:首页正文

IDL笔记

2023-04-14 来源:一二三四网
目录:

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)

因篇幅问题不能全部显示,请点此查看更多更全内容