IDL

IDL 8.4 新特性介绍

0
分享 2016-06-28
IDL 8.4于2014年10月15日正式发布。此版本中新增了许多实用的功能和工具,比如数据读取与可视化、新增数据类型等。而且IDL正向着更加现代化的语言发展,比如函数程序设计(Functional Programming)、静态类和方法等。除此之外,IDL工作台本身也变得更加人性化。主要改进如下:
  • 数据读取
  • 图形可视化
  • 数据分析
  • 数据类型
  • 语言更新

1. 数据读取
  • HDF5 函数库

更新提供对压缩格式SZIP (v2.1) 的只读支持。
  • 视频读取增强

在之前版本中,使用 IDL 读取 FFmpeg 时会弹出错误消息,并且 IDLffVideoRead 对象初始化失败。在 IDL 8.4 版本中,如果视频或音频编码不支持时,IDL 将自动忽略并继续打开视频文件。用户可以使用新的 VERBOSE 关键字来强制 IDL 弹出错误消息提示。
  • 支持输出Geospatial PDF

新增 IDLffGeospatialPDF 类,提供了输出图形为 Geospatial PDF 文件的功能。
2. 图形可视化
  • 新增获取代码方法

在快速可视化中,新增 GenerateCode 方法,可以获取当前图形可视化显示风格的源代码。比如,我们可以手动修改可视化窗口中的注记、对象属性、字体、颜色、坐标轴等,然后调用 GenerateCode 方法获取当前窗口风格的源代码,从而进行重复使用。可以选择是否保存当前窗口中可视化的数据。
示例如下,在一个窗口中绘制了一条曲线和一个柱状图。然后调用GenerateCode方法将源码输出到本地pro文件中,使用savedata关键字可保存数据到同名sav文件中。
IDL> p = PLOT(/TEST, THICK=3, COLOR='red', LAYOUT=[2,1,1])
IDL> b = BARPLOT(/TEST, FILL_COLOR='green', LAYOUT=[2,1,2], /CURRENT)
IDL> p.generateCode, 'D:\temp\mycode.pro', /savedata

自动获取的代码如下:

  • IDLgrAxis 增强

新增 TICKUNITS = "numeric" 和 TICKUNITS = "scientific" 两种坐标轴显示风格。
  • ERRORPLOT 新增两个属性

ERRORBAR_LINESTYLE —— 控制 Error Bars 的线型
ERRORBAR_THICK —— 控制 Error Bars 的线宽
  • 可视化窗口工具条

新版 IDL 中,快速可视化窗口中新增无工具条的选项。

  • 图形输出更加平滑

在调用 Save 和 CopyWindow 方法时,IDL 将使用反锯齿得到一个更加平滑的图像结果。
3. 数据分析
  • 新增 ALOG2 函数

可以计算以2为底的对数。
  • FFT_POWERSPECTRUM 函数

可以计算输入数组的傅立叶功率谱,并提供了源代码。
  • GAUSSINT 函数增强

更新后 GAUSSINT 函数可以接收二维数组了。
4. 数据类型
  • Big Integers

BIGINTEGER 类可以创建和操作任意大小的整型数字(例如大于64-bits的),并且可以和其他数据类型进行简单的数学计算。
IDL> b = BigInteger(2)^1279
IDL> help, b
B BIGINTEGER = 1.0407932194664400...x10^385
  • Booleans

BOOLEAN 变量只包含了两个值:0和1,分别代表 False 和 True。
IDL> a = [0.0, 1.0, 0.0, 3.0]
IDL> b = BOOLEAN(a)
IDL> print, b
0 1 0 1
IDL> print, json_serialize(b)
[false,true,false,true]
  • Attributes

可以直接所有 IDL 变量来获取其属性,比如DIM、LENGTH、NDIM、TNAME、TYPECODE、TYPENAME等。
IDL> s = findgen(3,4)
IDL> s.DIM
3 4
IDL> s.NDIM
2
IDL> s.LENGTH
12
IDL> s.TYPENAME
FLOAT
  • 静态方法(Static Method)

现在可以使用 IDL 变量来调用指定的静态方法,提供了更现代的面向对象编程方法。
IDL 变量支持的静态方法:

String 字符串支持的静态方法:

Number 数值支持的静态方法:


Integer 整型支持的静态方法:

Pointer 指针支持的静态方法:

例如:
IDL> arr = [1.0:5]
IDL> arr
1.0000000 2.0000000 3.0000000 4.0000000 5.0000000
IDL> arr.Ceil()
1 2 3 4 5
IDL> arr.Max()
5.0000000
IDL> arr.Mean()
3.0000000
IDL> arr.Product()
120.00000000000000
5. 语言更新
  • 文件夹监视系统

新增的 FOLDERWATCH 类可以监视文件夹的变化,或当文件夹发生变化时调用用户自定义的回调函数。
这样用户就可以编写一个批处理,使用 FOLDERWATCH 监视一个指定文件夹,当文件夹内发生预想的变化时(如新增文件、文件修改或删除等),继续执行下面的处理。
如下代码,实现了监视'D:\temp\'文件夹的功能,并使用回调函数MyCallback在IDL工作台打印文件修改状态。

当我在监视文件夹删除和重命名某个文件时,IDL控制台提示如下:

  • 函数程序设计(Functional Programming)

IDL 开始支持函数程序设计,类似其他编程语言。现在可以创建简单的 inline routines 用于函数编程。这些 Lambda 程序可以与这些方法搭配使用,如::Filter、::Map、::Reduce;也可以作为单独的函数或过程来调用。
这里有几个示例:
IDL> ;求var的平方根
IDL> var = [0:4]
IDL> PRINT, var.Map(LAMBDA(n: sqrt(n)))
0.000000 1.00000 1.41421 1.73205 2.00000

IDL> ;利用Filter函数求得区间内的素数
IDL> var = [2:50]
IDL> lam = LAMBDA(n:n le 3 || MIN(n mod [2:FIX(SQRT(n))]))
IDL> newvar = var.Filter(lam)
IDL> PRINT, newvar
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

  • 代码覆盖范围

新增 CODE_COVERAGE 函数,可以帮助 IDL 用户高亮显示执行和未执行的代码行。并整合到了IDL 工作台中,比如编辑器和剖析工具(Profiler)中。
在IDL编辑器中编写如下函数,并保存编译。

可以使用code_coverage函数获取执行和未执行的行号:

同时可以打开"窗口 > 剖析工具",单击如下图的按钮,即可在IDL编辑器中使用不同颜色高亮显示代码运行情况,如绿色为执行的代码行。

  • TIMER 类改进

TIMER 类新增两个方法:Block 和 Unblock。新版 IDL 不会自动中断回调。
  • ARRAY_EQUAL 函数改进

新增 NOT_EQUAL 关键字,可以逆转结果。
新增 QUIET 关键字,可以抑制所有数据类型转化时遇到的错误。
  • 新增 NOSAVE编译选项

如果一个程序被标记了 COMPILE_OPT NOSAVE,那么将不会编译到IDL .sav文件中。
  • HASH、ORDEREDHASH、JSON_PARSE 新增 FOLD_CASE 关键字。
  • IDL_Container 类新增存储指针功能。
  • LIST 数据类型更新

List::Sort 方法增加一种可选的比较算法进行元素的排序;
List::Add 方法进行了优化,性能提高。
  • 图形支持Unicode字符,最多8个十六进制数字。
  • ISA 函数新增COMPLEX、FLOAT、INTEGER、STRING关键字。
  • JSON_SERIALIZE 功能改进

当使用 JSON_SERIALIZE 转换 IDL 结构体时,可以设置 LOWERCASE 关键字,这样可以使得 JSON 字符串结果中的 Tag Names 为小写。
新版 JSON_SERIALIZE 转换字节型数值为整型时,不会将非0值的字节型全部转换为ture了,保证数据不会丢失。
  • 库更新

cURL 库更新到版本 7.36.0*
OpenSSL 库更新到版本 1.0.1g*

注:IDL 8.4 将是最后一个包含 Live Tools 函数的版本。在 IDL 8.4 之后的版本中将不再提供。
文章来源:http://blog.sina.com.cn/s/blog_764b1e9d0102v65g.html

0 个评论

要回复文章请先登录注册