【IDL】IDL 8.4新特性介绍
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 之后的版本中将不再提供。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)