IDL 8.2.2(SP2)新特性

2022/6/14 23:20:37

本文主要是介绍IDL 8.2.2(SP2)新特性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

发表于 2013-03-06


IDL 8.2.2为IDL图形进行了一些功能改进,新增了几个函数过程和一个系统变量,提供了Widget组件编程的新特性,极大地提升了如PLOT等函数的启动速度。并简化了ENVI自定义工具的创建。工作台编辑器的功能有了改进和增加。

1. 新增IDL技巧专题

在IDL8.2.2帮助中新增了一个技巧专题。此专题在以后会一直进行扩充,可以帮助用户编写的程序更加简单高效。

2. 新增函数

2.1 BOXPLOT

现在可以使用BOXPLOT函数绘制箱线图。如图所示,提供一个N列5行的数组(其中N为绘制图形个数),每一列对应一个图形,5个元素分别对应图中箭头所示位置的Y值。

你可以自定义输入数组的值,也可以使用CREATEBOXPLOTDATA函数自动生成。 


图:BoxPlot函数示例

2.2 CREATEBOXPLOTDATA

顾名思义,CreateBoxPlotData函数是为BoxPlot函数创建数据的。自动计算输入数组每一列的最小值(排除可能的异常值)、下四分之一值、中值、上四分之一值、最大值(排除可能的异常值)。

bike_mph = [ $
[12.2, 16.2], $
[12.1, 16.4], $
[10.7, 16.9], $
[11.6, 17.0], $
[10.2, 16.5], $
[10.9, 16.1], $
[11.8, 17.1], $
[10.9, 100.0], $    ;存在一个异常值100.0,看结果已经排除此异常值,最大值为17.50
[12.4, 16.8], $
[12.9, 16.9], $
[13.1, 17.5], $
[13.0, 17.4]]
bpd = CREATEBOXPLOTDATA(bike_mph, MEAN_VALUES=means, OUTLIER_VALUES=outliers)
PRINT, bpd
 10.200000      16.100000
 10.900000      16.424999
 11.950001      16.900000
 12.775000      17.324999
 13.100000      17.500000

2.3 IMAGE_THRESHOLD

IMAGE_THRESHOLD函数返回一个二值图像,大于阈值则为1,小于阈值则为0。可选的自动阈值算法有:Isodata、Otsu、Moments、Maxentropy、Minerror和Mean。如图所示,上图为原始图像,下图为返回的二值图像。

图:IMAGE_THRESHOLD函数示例

2.4 SCATTERPLOT和SCATTERPLOT3D

SCATTERPLOT和SCATTERPLOT3D函数可以绘制二维和三维散点图。

 

图:SCATTERPLOT函数示例

2.5 TIC和TOC

TIC和TOC程序可以获取IDL程序的运行时间。TIC程序可以被用作过程或函数。当TIC被当作过程调用时,TIC和TOC可以输出被调用之间的运行时间。当TIC被用作函数调用时,TOC程序可以计算TIC指定过程的运行时间。这样便可以计算子程序和循环内的运行时间。TIC和TOC程序同样可以被用来启动和禁止IDL代码分析器。

3. 其他更新内容

新增 !CONST 系统变量

!CONST系统变量格式为IDL结构体,包含了常用的物理常数。例如,使用里德伯常量计算氢原子跃变放射出的光波长。

 

首先核查里德伯常量的值:

PRINT, !CONST.me*!CONST.ev^4/(8*!CONST.eps0^2*!CONST.h^3*!CONST.c)
PRINT, !CONST.Rydberg
IDL prints:
10973732.
10973732.

现在计算从n=2到基态的转换:

PRINT, 1e9/(!CONST.Rydberg*(1 - 1./4)), " nm"
IDL prints:
121.50227 nm

获取随机数算法改进

RANDOMU和RANDOMN函数现在使用Mersenne Twister算法来生成随机数。Mersenne Twister算法相对旧版随机数生成器来说,是一个重大改进。

如果想要使用旧版算法,可以使用RAN1关键字。

Graphics: CURRENT关键字升级

CURRENT关键字升级了,用户可以指定此关键字等于已经存在的图形窗口,则指定的图形窗口自动变为当前窗口。

Graphics: 带投影图片显示改进

当显示图像具有地图投影时,IDL自动设置图像的地图范围。同样可以添加显示Box Axes,而不需要手动计算范围。

图:显示图像在某地图投影下,可以自动添加Box Axes

Graphics: 显示地图视界

现在可以显示所有地图投影类型的边界。MAP和MAPGRID函数有三个相关属性:HORIZON_COLOR、HORIZON_LINESTYLE和HORIZON_THICK。例如:

; Create a map using the interrupted Goode projection.
mGoode = MAP('Interrupted Goode', FILL_COLOR='light blue', $
HORIZON_COLOR='red', HORIZON_THICK=3, TITLE='Interrupted Goode')
mc = MAPCONTINENTS(/FILL_BACKGROUND, FILL_COLOR='gray')

 

图:地图视界显示示例

Graphics: POSITION属性

在所有图形对象中添加了新的POSITION属性。在之前的版本,只能对“main”图像函数使用POSITION属性,例如PLOT、CONTOUR。在创建时,POSITION可以被设置为含有4个元素的向量,[X1, Y1, X2, Y2],分别对应了左下角和右上角的坐标。如果设置为2个元素的向量,则为要显示图形的中心点位置。

Graphics: 速度提升

所有图形函数的启动速度有了极大的提升。其中,利用硬件渲染明显提升了PLOT函数的速度,特别是在绘制大数据量的点时。例如:

;IDL8.2.2版本测试代码
n = 1e6
x = RANDOMU(seed, n)
PRINT, 'Graphics functions:'
FOR i=0,2 DO BEGIN & TIC & p = PLOT(x) & TOC & p.CLOSE & ENDFOR
PRINT, 'Direct graphics:'
FOR i=0,2 DO BEGIN & TIC & PLOT, x & TOC & WDELETE & ENDFOR
 
;IDL8.0及之前版本测试代码
n = 1e6
x = RANDOMU(seed, n)
PRINT, 'Graphics functions:'
FOR i=0,2 DO BEGIN & start = systime(1) & p = PLOT(x) & print, systime(1)-start & p.CLOSE & ENDFOR
PRINT, 'Direct graphics:'
FOR i=0,2 DO BEGIN & start = systime(1) & PLOT, x & print, systime(1)-start & WDELETE & ENDFOR

 

IDL8.2.2 prints:

Graphics functions:
% Time elapsed: 2.3860002 seconds.
% Time elapsed: 2.1719999 seconds.
% Time elapsed: 2.1790001 seconds.
Direct graphics:
% Time elapsed: 0.73799992 seconds.
% Time elapsed: 0.64499998 seconds.
% Time elapsed: 0.63299990 seconds.

IDL8.0 prints:

Graphics functions:
      17.503000
      7.6090000
      7.4710000
Direct graphics:
     0.67799997
     0.64600015
     0.65400004

IDLgrPlot: 新的直方图样式

使用IDLgrPlot对象时,设置HISTOGRAM = 2可以超出数据的范围。或设置HISTOGRAM = 3,将水平线的起始点落在每一个X位置,而不是中心位置。

PLOT和BARPLOT: 新的直方图样式

PLOT和BARPLOT函数均添加了新的HISTOGRAM属性。区别在于直方图的起始点位置不同。如下面的例子所示。

h = HISTOGRAM(5*RANDOMU(1,25), BINSIZE=1, MIN=0.0, LOCATIONS=loc)
ex = {THICK:2, XRANGE:[-0.5,5.5], YRANGE:[0,10], $
XMINOR:0, XTICKLEN:0.02, YMINOR:0, YTICKLEN:0.02}
p1 = PLOT(loc, h, /STAIRSTEP, LAYOUT=[2,2,1], $
_EXTRA=ex, XTITLE='Plot Stairstep')
p2 = PLOT(loc, h, /HISTOGRAM, LAYOUT=[2,2,2], $
_EXTRA=ex, /CURR,XTITLE='Plot Histogram')
p3 = BARPLOT(loc, h, LAYOUT=[2,2,3], _EXTRA=ex, $
/CURR,XTITLE='Barplot Default')
p4 = BARPLOT(loc, h, LAYOUT=[2,2,4], _EXTRA=ex, $
/CURR, /HISTOGRAM, XTITLE='Barplot Histogram')

 

图:PLOT和BarPlot新的直方图样式

ROUTINE_FILEPATH函数改进

如果调用时不输入任何参数,将自动返回当前源码文件的完整路径。这在读取与源码文件相同路径下的数据时非常有用。

工作台编辑器自动补全块语句

当使用块语句时,输入语句最后一词为“begin”时,按回车会自动补齐“end”。支持的块语句包括:IF/ENDIF、FOREACH/ENDFOREACH、 FOR/ENDFOR、ELSE/ENDELSE、WHILE/ENDWHILE、 CASE/ENDCASE、SWITCH/ENDSWITCH和REPEAT/ENDREP。自动补全的“end”与“begin”具有相同的格式(如全大写、小写、首字母大写等)。

如,当输入“IF 1 then begin”后回车,自动在后边补齐ENDIF。

可以在IDL首选项中设置是否自动补全。如图中红框位置。

 

图:设置是否自动补全块语句

工作台编辑器自动格式化

在IDL工作台的编辑器内粘贴一行或多行语句时,编辑器自动应用默认的格式。相对于之前版本中,等同于粘贴代码后点击源码→格式。

可通过IDL首选项中设置是否使用此功能,如上图中蓝色框中所示位置。



这篇关于IDL 8.2.2(SP2)新特性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程