Interactive Data Language

Slides:



Advertisements
Similar presentations
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
Advertisements

C语言程序设计 主讲教师 :张群燕 电话:
6 Copyright © Oracle Corporation, All rights reserved. 维护控制文件.
Tool Command Language --11级ACM班 金天行.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
数字图像处理 刘伯强 山东大学生物医学工程.
在PHP和MYSQL中实现完美的中文显示
Hadoop I/O By ShiChaojie.
Overview of Python Visualization Tools
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
IDL程序1 基础语法与数据处理 授课人:李景刚 手机:
SQL Injection.
走进编程 程序的顺序结构(二).
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第一讲: 基本流程(1).
1.2 MATLAB变量表达式与数据格式 MATLAB变量与表达式 MATLAB的数据显示格式
第二章 Java语言基础.
第七章 操作符重载 胡昊 南京大学计算机系软件所.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
VisComposer 2019/4/17.
姚金宇 MIT SCHEME 使用说明 姚金宇
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
项目二:HTML语言基础.
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
信号量(Semaphore).
第六章 Excel的应用 一、Excel的单元格与区域 1、单元格:H8, D7, IV26等 2、区域:H2..D8, HS98:IT77
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
Visual Basic程序设计 第13章 访问数据库
学习目标 1、了解基本运算符 2、运算符优先级.
计算机绘图 AutoCAD2016.
分数再认识三 真假带分数的练习课.
2019/5/21 实验一 离散傅立叶变换的性质及应用 实验报告上传到“作业提交”。 11:21:44.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
Python 环境搭建 基于Anaconda和VSCode.
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
数据表示 第 2 讲.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
第四章 UNIX文件系统.
复习 界面介绍 工作簿 工作表 单元格 删除 添加 改名 移动 美化 内容修改 文字设置 边框设置 背景色设置 单元格对齐 单元格合并
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
顺序结构程序设计 ——关于“字符串”和数值.
编译原理实践 6.程序设计语言PL/0.
第二次课后作业答案 函数式编程和逻辑式编程
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

Interactive Data Language 可视化的IDL工具 Interactive Data Language 中科院计算机网络信息中心 超级计算中心 谢茂金 Email: xiemaojin@sccas.cn 2010.9

内容提要 可视化的IDL 并行IDL简介 进一步学习IDL IDL概况 IDL图形系统 IDL坐标系统 变量、数组、过程、函数、输入输出、循环、分支、判断等语法基础。 可视化的IDL IDL图形系统 IDL坐标系统 数据可视化:绘制线Plot,等值线,面,体绘制 智能工具iTools 并行IDL简介 进一步学习IDL 通过 IDL程序导读与语法解析,向听众展示IDL的操作方法,基本语法——(包括数据与变量,数组,循环,分支,判断,过程,函数),输入输出,等。

IDL是什么 IDL(Interactive Data Language,交互式数据语言)是美国ittvis公司的旗舰产品,它既是对数据进行可视化表现、分析及应用开发的软件,又是面向矩阵、语法简单的第四代可视化计算机语言。是进行数据分析、可视化表达与跨平台应用开发的理想工具。 IDL用户涵盖NASA、ESA、NOAA、Siemens、GE Medical、Army Corps of Engineers、MacDonald Dettwiler 等。 NASA选用IDL进行飞越火星航空器的研究,JPL科学家利用IDL对“勇气号”和“机遇号”的数据进行数据分析和处理。

IDL的特点 IDL=VC 菜单的定制、消息传递 IDL=VB 可视化界面的设计、语言通俗易懂、编程入门 容易 IDL=JAVA 具有良好的跨平台能力,方便移植,面向对 象特性 IDL=FORTRAN+C 语言风格绝大部分继承自Fortran,少量 来源于C。面向矩阵,执行效率高,代码量比C和Fortran 少得多,简洁而不失灵活性。 IDL=MATLAB 提供了大量封装和参数化了的数学函数及 各种信号处理的方法,使用方法也非常类似。 IDL=OPENGL 提供了丰富的二维、三维图形图像操作类 ,能高效快速地对数据进行可视化。

其他…

IDL支持的文件格式 文本格式:Readf, Read_ascii, Printf 二进制格式:Readu, Read_binary, Writeu 科学数据格式: CDF: begin with the prefix "CDF_" HDF4: begin with the prefix "HDF_" HDF5: begin with the prefix "H5_" or "H5*_" HDF-EOS:begin with the prefix "EOS_" NetCDF:begin with the prefix "NCDF_".

图像处理 IDL提供了具有强大的图像处理能力。 支持多种文件格式,只要用Read(Write)_Image两个函数,即可读写IDL支持的任何图像文件。也可以用Dialog_Read(Write)_Image交互读取。TV函数即可显示图像。 提供了方便的傅里叶变化,小波变换,Hough变换,Radon变换等,各种图像增强滤波操作,形态学操作,图像分割、识别等丰富的图像处理和分析函数。 图像也是数组,所以各种可以处理数组的函数也可以用于图像数据的处理。 SMOOTH(image, [1, 1, 21]) SMOOTH(image, [1, 21, 1]) SMOOTH(image, [1, 5, 5]) 原图

IDL支持的图像格式 IDL支持的图像格式 格式 描述 BMP Windows Bitmap format DICOM Digital Imaging and Communications in Medicine GeoTIFF TIFF file with tags containing geographic data GIF Graphics Interchange Format Interfile Interfile version 3.3 format JPEG Joint Photographic Experts Group format JPEG 2000 JPEG 2000 format Motion JPEG2000 Motion JPEG2000 format

IDL支持的图像格式 IDL支持的图像格式(续表) Format Description MPEG Moving Picture Experts Group format MrSID Multi-resolution Seamless Image Database format NRIF NCAR Raster Interchange Format PICT Macintosh version 2 PICT files (bitmap only) PNG Portable Network Graphics format PPM PPM/PGM format SRF Sun Raster File format TIFF 8-bit or 24-bit Tagged Image File format X11 Bitmap X11 Bitmap format used for reading bitmaps for IDL widget button labels XWD X Windows Dump format

SMOOTH(image, [1, 1, 21]) SMOOTH(image, [1, 21, 1]) SMOOTH(image, [1, 5, 5]) 原图 图像处理例子 file = FILEPATH('rose.jpg', SUBDIRECTORY = ['examples', 'data']) image = READ_IMAGE(file) imageSize = SIZE(image, /DIMENSIONS) DEVICE, DECOMPOSED = 1 ;Decomposed={0|1}伪彩色/真彩彩色 WINDOW, 0, XSIZE = imageSize[1], YSIZE = imageSize[2], $ TITLE = ‘Original Rose Image’ TV, image, TRUE = 1 ;True={1|2|3} 对应 (3,m,n),(m,3,n), (m,n,3) WINDOW, 1, XSIZE = 3*imageSize[1], YSIZE = imageSize[2], $ TITLE = 'Vertically Smoothed (left), Horizontally ' + $ 'Smoothed (middle), and Both (right)‘ smoothed = SMOOTH(image, [1, 1, 21]) TV, smoothed, 0, TRUE = 1 smoothed = SMOOTH(image, [1, 21, 1]) TV, smoothed, 1, TRUE = 1 smoothed = SMOOTH(image, [1, 5, 5]) TV, smoothed, 2, TRUE = 1 ; Display the results. RGBRGBRGB…….RGB RRRRRRRRRR….RRR GGGGGGGGG….GGG BBBBBBBBBB…...BBB …………………………… RRRRRRRRRR….RRR GGGGGGGGG….GGG BBBBBBBBBB….BBB TVScl 函数、过程、参数、关键字、返回值; 函数和过程统称为例程 routines

IDL程序导读与语法解析 编译和 执行 在shell下: [scxiemj@v3904 ~]$ idlde 即可打开IDE 控制台显示输出结果 显示用户变量和系统变量 在此输入命令

直接敲入idl,运行命令行形式的IDL 分号后面的为注释 Indgen(3,4)生成3列4行的二维数组,每个元素的值依次递增,注意是按列存储。 直接敲入idl,运行命令行形式的IDL 分号后面的为注释 IDL运行方式之二:命令行方式的IDL 顺便对数组,输出,绘图等基本的东西有一个感性的认识 常用的符号 注释用分号 ; 12

程序导读与语法解析 IDL程序的几种运行方式 命令行程序:命令行下:.RUN>-代码>END。.GO运行 批处理文件:在文本文件中输入代码,保存为.pro文件。@FileName运行 日志文件:命令行下: JOURNAL>代码>JOURNAL。 @FileName运行。 包含文件:包含一系列IDL命令的文本文件,默认扩展名为.INC。在其他文件中用@FileName.inc的方式调用。 主程序文件:命令序列,以END结束,保存为.pro,<F5>, .GO, .RUN或 .RNEW命令运行,不能在命令行直接输入文件名运行。 过程、函数、过程文件的编写和执行 过程、函数、过程文件将在程序导读中详细介绍

IDL程序设计基础 大小写不敏感 弱类型,赋值和类型提升 矩阵:列优先 常用功能符号 注释 ; 续行 $ 断句 & a=5 help,A b=3.5d & c=4L & help, a, b, c help, a+c B=c & help, b d=fltarr(2,4) & help, d d[0,0]=1L & print, D 14

一个简单程序 该程序读入一小一大两个整形数给变量a和b,将a和b之间的奇数存储到一个数组中,并统计数组元素的总和 IDL有多种使用方式,可以用命令行交互输入,可以用

从一段简单程序导读中介绍IDL的命令书写规则,基本数据类型,数组,输入输出,分支判断,循环,函数,过程等基本程序设计的概念,给听众一个基本的感性认识 命令的基本格式为: 命令动词[,参数1, …, 参数n][,关键字1, …, 关键字n] 如 print, 300, 600, 900, FORMAT=‘(I3, I6, I9)’,其中print为命令动词,300,600,900为参数,FORMAT为关键字,关键字可有可无,顺序不定,而参数则有一定的顺序,且必须出现。参数有可变长参数和确定个数的参数,print,help等是典型的可变长参数,所谓可变长,即可以写任意多个参数。 ;一个简单的程序mysimplePro.pro,一行中,分号(;)之后的部分皆为注释,主文件名为过程名 pro MySimplePro ;一个pro程序,以pro开头,以end结尾,不区分大小写 ;L表示长整形,对于基本类型,赋值时,值和类型一起赋给左边的变量。符号&是语句分隔符,将一行中多条语句分隔开 a=0L & b=0L while b le a do begin ;该行读取两个整形值,分别给两个参数a和b,而PROMPT是关键字,其作用是使命令行提示符由"IDL>"变成该标签"请输入两个数:" read, a, b, PROMPT="请输入两个整数:" if b gt a then print, a, b else print, "b<=a,请重新输入" ;打印输出a和b的值 endwhile dstArr = LonArr((b-a)/2+1) idx=0L ;用for循环遍历 for i=a, b do begin ;注意IDL的逻辑判断,奇数的char,int,long为真,偶数和0为假;非零float,double,complex为真;非空字符串为真 if i then begin dstArr[idx]=i idx++ endif endfor print, dstArr print, '目标数组的总和是', total(dstArr) End

分支、循环 过程:以保留字Pro开头,End结尾,其基本格式如下: Pro 过程名,[参数1,…,参数n],[关键字1,…,关键字n] 命令序列…. End 3B 128L 16384LL 3.14159D 7U 4UL 100ULL BytArr IntArr LonArr FltArr DblArr ComplexArr 从一段简单程序导读中介绍IDL的命令书写规则,基本数据类型,数组,输入输出,分支判断,循环,函数,过程等基本程序设计的概念,给听众一个基本的感性认识 命令的基本格式为: 命令动词[,参数1, …, 参数n][,关键字1, …, 关键字n] 如 print, 300, 600, 900, FORMAT=‘(I3, I6, I9)’,其中print为命令动词,300,600,900为参数,FORMAT为关键字,关键字可有可无,顺序不定,而参数则有一定的顺序,且必须出现。参数有可变长参数和确定个数的参数,print,help等是典型的可变长参数,所谓可变长,即可以写任意多个参数。 ;一个简单的程序mysimplePro.pro,一行中,分号(;)之后的部分皆为注释,主文件名为过程名 pro MySimplePro ;一个pro程序,以pro开头,以end结尾,不区分大小写 ;L表示长整形,对于基本类型,赋值时,值和类型一起赋给左边的变量。符号&是语句分隔符,将一行中多条语句分隔开 a=0L & b=0L while b le a do begin ;该行读取两个整形值,分别给两个参数a和b,而PROMPT是关键字,其作用是使命令行提示符由"IDL>"变成该标签"请输入两个数:" read, a, b, PROMPT="请输入两个整数:" if b gt a then print, a, b else print, "b<=a,请重新输入" ;打印输出a和b的值 endwhile dstArr = LonArr((b-a)/2+1) idx=0L ;用for循环遍历 for i=a, b do begin ;注意IDL的逻辑判断,奇数的char,int,long为真,偶数和0为假;非零float,double,complex为真;非空字符串为真 if i then begin dstArr[idx]=i idx++ endif endfor print, dstArr print, '目标数组的总和是', total(dstArr) End 分支、循环 数组函数:求和

过程文件 1)过程文件用来存放多个IDL过程和函数,其扩展名为.pro 2)主文件名可以与某个过程名相同,也可以不同,若相同,则该过程必须放在过程文件的最后 pro pro1, x, Y=mykeyword print,x,mykeyword end pro pro2 print, "this is proName2" function func1, x, y, z print,"this is a function, their parameters are:" print,x,y,z return, [x,y,z] pro pro3, x, Y=myKeyword print, "call proName1 first" pro1, x, Y=myKeyword print, "this is pro3" 3)过程文件编译(CTRL+F8)后,可以按照过程和函数的调用方法任意调用过程文件中的过程和函数。

过程文件的编译及过程调用 过程文件的编译(CTRL+F8)和调用 pro pro1, x, Y=mykeyword print,x,mykeyword end pro pro2 print, "this is proName2" function func1, x, y, z print,"this is a function, their parameters are:" print,x,y,z return, [x,y,z] pro pro3, x, Y=myKeyword print, "call proName1 first" pro1, x, Y=myKeyword print, "this is pro3"

基本数据类型 数据类型 【十进制后缀】(占用字节) Byte【nB】(1字节) 4B, 12B; Int【n或nS】 及 无符号整形【nU或nUS】(2字节) -6, 8S; Long Int【nL】及无符号长整型nUL(4字节)。 -128L,4UL 64位长整型nLL及64位无符号长整型nULL。(8字节) 94LL, 12ULL。 Float【n.或.nF或n.n或nE或nEsx】(4字节)3.14, 0., 3.14E12 Double 【n.或nd或n.n或nE或nDsx】(8字节)3.14D, 3.14D Complex 【无】(单精度8字节,双精度16字节) complex(1.7,1.44),complex(1.44D, 4.7D) String 【无】’hello IDL’ “I’m a string!” 琐碎的语法再简单介绍一下

数据类型代码表 代码 名称 数据类型 0 Underfined Undefined 1 Byte Byte 2 Int Integer 代码 名称 数据类型 0 Underfined Undefined 1 Byte Byte 2 Int Integer 3 Long Longword integer 4 Float Floating point 5 Double Double_precision floating 6 Complex Complex floating 7 String string 8 Struct Structure 9 DComplex Double_precision complex 10 Pointer Pointer 11 ObjRef Object reference 12 UInt Unsigned integer 13 ULong Unsigned Longword integer 14 Long64 Longword 64-bit integer 15 ULong64 Unsigned 64-bit integer

常量 字符型常量:又称为字符串,用“”或‘’界定 “IDL7.1”, “12-47”, “I’m OK”, ‘2010/09/13’ 数值型常量: 1.414,3.14159265D, 0L,COMPLEX(1.4, 2.03) 逻辑型常量:真和假,判断为真的情况如下: 字节型、整形和长整型的奇数; 如43B, 5, 1L 为真。44B, 0, 4L等为假 非零的浮点型、双精度、和复数类型; 如5.4f,complex(4.1, 0) 非空的字符串。 如‘abc’,而空字符串 ”” 为假

系统变量 系统变量:以感叹号!开头。如!PI (π) 内部系统变量:由系统自动提供、自动生成和维护的一组特殊变量。 自定义系统变量:用户根据需要自定义,用于描述系统运行中的状态或用于某种特殊用途。 DEFSYSV, ‘var1’, expression[,Read_Only] DEFSYSV, ‘var1’, EXISTS = var2

系统变量 带锁,表示只读不写 !DTOR 0.017453292 !PATH D:\\Program File... 可用AddPath命令增加搜索路径 !PI 3.1415927 !PROMPT IDL>

内存变量 临时存储于内 存中的变量,例: IDL> a=4.0D IDL> b=2.4L b=2.4L ^ % Syntax error. IDL> c=1.4 IDL> p=ptr_new(c)

查看变量 print[,exp1,exp2,…,expn][,FORMAT=format] a=3.0D & b=4L print,a, a+b, a/2, FORMAT=(‘I4, I4, I4’) help, exp1, exp2, …, expn[,NAMES=“通配符”] [,OUTPUT=var] [,/SYSTEM_VARIABLES][,/STRUCTURES] help, a, output = myVar ;把变量a的信息存入myVar中 help, NAME = ‘a*’ ;显示所有以a开头的变量信息 help, !D, /STRUCTURES ;显示系统变量!D的结构信息

查看变量

变量的存储、释放与恢复 保存:将有价值的内存变量[和编译程序及函数]保存到文件中,以备下次继续使用。 SAVE[,var1,…,varn] [,/ALL] [,/COMM,/VARIBLES] [,COMPRESS][,FILENAME=‘文件名’] [,/ROUTINES] [,/SYSTEM_VARIBLES] 释放:关闭所有文件,释放所有用户定义的变量、指针、对象等,初始化IDL环境 .RESET_SESSION .FULL_RESET_SESSION ;+卸载所有动态库 恢复:将之前保存在文件中的内存变量[和编译程序及函数]恢复到内存中继续使用。 RESTORE[[,”文件名”] | [,FILENAME=“文件名”]] 【注】若不写文件名的话,save时将保存到idlsave.dat中,restore时将从idlsave.dat中恢复

数组 按列存储,允许使用1~8维数组 数组创建 1)直接创建(能创建1~3维)数组名=[表达式表] myArray = [21, 10, 6, 6, 4, 9] myArray = [[21, 10, 6], [6, 4, 9]] ;2行3列 myArray = [ [[1, 2, 3], [4, 5, 6]] , [[7, 8, 9], [10, 11, 12]] ] ; 3列2行2层,下标顺序为 [列,行,层] myArray[0,0,0]=1 myArray[1,0,0]=2 myArray[2,0,0]=3 myArray[0,1,0]=4 myArray[1,1,0]=5 myArray[2,1,0]=6 myArray[0,0,1]=7 myArray[1,0,1]=8 myArray[2,0,1]=9 myArray[0,1,1]=10 myArray[1,1,1]=11 myArray[2,1,1]=12

数组 数组创建 2)用函数创建(1~8维)数组初值为0的函数 myArray = fltArr(d1[,…,d8][,/NOZERO]) 【注:】像fltArr这样的函数还有BytArr(), IntArr(), uIntArr(), LonArr(), uLonArr(), Lon64Arr(), uLon64Arr(), DblArr(), ComplexArr(), DComplexArr(), StrArr()用于创建各种类型的数组 myArray = fltArr(3,2) & print, myArray myArray = fltArr(3,2,/NOZERO) & print, myArray myArray = findgen(3,2) & print, myArray myArray = replicate(!PI, 3, 2) & print, myArray

数组 数组创建 3)用函数创建(1~8维)数组初值为索引号的函数 IndGen(d1[,…,d8][,/*]|[TYPE=value]) ;*代表某个数据类型,可以是Byte,complex,dcomplex, double, float, L64, Long, String, Uint, UL64, Ulong.这种方法通过关键字来确定数组类型,value取[0,15]表示16种类型 像FIndGen的方法还有BIndGen,UIndGen, LIndGen, ULIndGen, L64IndGen, DIndGen, CIndGen, DCIndGen, SIndGen 4)Replicate(exp, d1[,…,d8])用来创建一个所有数组值均是表达式的值的一维或多维数组 myArray = indgen(3,2, /Long) & print, myArray myArray = findgen(3,2) & print, myArray myArray = replicate(!PI, 3, 2) & print, myArray

数组 赋值和引用

数组 小心:二维下标数组的方式可能会让你感到失望!二维下标数组会被IDL拆解成一维下标数组 赋值和引用 ? 用二维的下标数组可以吗

数组操作 常用的函数 求和total(myArray[*:10, 10*4]) 求最大/最小值 Max(myArray, MIN=myMin) 元素个数N_Elements(myArray) 数组尺寸Size;维数、列数、行数、类型、元素个数 Mean平均值、Variance方差、StdDev标准偏差 Monent计算数组的平均值、方差、倾斜度、峰值、平均绝对偏差、标准偏差 Where返回满足指定条件的数组元素下标所组成的一维数组 Reform在不改变数组元素的前提下重新生成新的维数的数组

常用运算符 数值运算:()圆括号 +加 ++自加 –减 --自减 MOD模 *乘 /除 ^乘方 [ ]数组或下标 <求最小 >求最大 #矩阵列乘 ##矩阵行乘 关系运算符:EQ等于 LT小于 GT大于 NE不等于 LE小于等于 GE大于等于 逻辑运算: ~逻辑非 &&逻辑与 ||逻辑或 NOT按位非 AND按位与 OR按位或 XOR按位异或 赋运算: = ##= *= += -= /= AND= EQ= GE= GT= LE= LT= MOD= NE= OR= XOR= <= >=

常用控制语句 Begin – End If – Then – Else For – Do While – Do Repeat – Until Case X of – else – endcase Expr? Expr1:expr2 (条件判断语句)

可视化的IDL IDL图形系统 直接图形系统和对象图形系统 坐标系统 窗口系统 数据可视化

IDL的图形系统 之直接图形法和对象图形法 直接图形法: 创建2D图形时常用,如:plot, mapping, contours。简单、快速,但需反复重画,依赖于当前图形设备; 对象图形法: 加速3D系统显示,灵活,交互性强,充分控制对象,对象驻留内存,不需反复重画。 对象管理:生成Obj_New,销毁Obj_Destroy,有效性查询Obj_Valid 对象属性:获取GetProperty,设置SetProperty

对象图形系统的类和对象 显示:*Window (*代表前缀IDLgr) 容器:*Scene, *View, *ViewGroup。 模型:*Model,是容器对象的子对象,起承上启下作用 图元:*Image, *Surface, *Axis, *Countoure,*Polyline, *Ploygon, *Light, *Volume 属性:*Clipboard,*Font,等无法直接显示的属性 利用容器和模型对象的add方法构造右图所示的结构,利用 *Window对象的draw方法绘制容器对象的内容。 Graphics Atom View Scene Model 对象图形系统 组成结构和调用

图形系统之坐标系统 IDL提供了三种独立的坐标系统: 坐标系统之间的互相转换 数据坐标系统:通常与数据范围相同,可以是线性、对数或半对数的,系统默认的坐标系统 设备坐标系统:选定设备的实际坐标系统 归一化坐标系统:将数据坐标系统或设备坐标系统中行列数据范围归一化到[0,1]范围。 坐标系统之间的互相转换 数据坐标系统、设备坐标系统、归一化坐标系统间:CONVERT_Coord(x[,y [,Z]], [,/Data|,/Device, /Normal], [,/Double][,/To_Data| ,/To_Device,|/ To_Normal]) 笛卡尔坐标、极坐标、柱面坐标和球坐标系统间:CV_Coord([,/Degrees][,Double][,From_Cylin=cyl_coords| ,From_Polar=pol_coords| ,From_Rect=rect_coords| , From_Sphere=sph_coords] [,/To_Cylin|,/To_Polar|,/To_Rect, /To_Sphere]

窗口系统 建立:myWin = OBJ_NEW(‘IDLgrWindow’,[关键字=属性] …) 绘制:*Draw[,IDLgrView | IDLgrViewGroup | IDLgrScene对象] (*代表myWin->[IDLgrWindow::]) 清除:*Erase [,color= index | [R,G,B]] 显示/隐藏:*Show, 0 | 1 最小化/还原:*Iconify, 1 | 0 删除:*Clean,OBJ_Destroy 窗口对象的下一级对象是IDLgrView,可以设置IDLgrView对象的属性来修改view的大小和位置、投影方式、裁剪平面和裁剪方式、进行几何变换

数据可视化 绘制线Plot,多线oPlot, 无坐标轴多线Plots 绘制等值轮廓线Countour 绘制网格面Surface,阴影曲面Shade_Surf 绘制投影曲线Plot_3DBox 体绘制IDLgrVolume,xVolume 绘制坐标轴Axis 绘制文本XYOUTS 绘制条形图Bar_Plot 交互文本标注Annotate 交互控制trackball 着重讲解前面几种 灰色部分从略

线的绘制 绘制线Plot Plot,[X]Y[,关键字] X | Y: 绘制线的 X | Y 轴坐标组成的数组。在绘图时X和Y被转换成Double数组 IDL> x=Findgen(101)*(0.01*2.0*!PI) IDL> y = Sin(x) Plot, x, y Plot, y Plot, x, y Plot, y

线的绘制 Plot有几十个关键字用于控制绘制的属性,包括线的虚实粗细,图形符号,颜色,位置,裁剪;标题文字及相应字体;坐标轴及其刻度的粗细长短宽窄朝向;所用的坐标系统及其缩放等每一个细节。

线的绘制 Plot部分关键字和使用方法 /ISOTROPIC:强制把X轴和Y轴转换成等比例 /Polar:绘制极坐标下的线。这时格式为 Plot, r, theta, /Polar /THICK=value:设定绘制线的粗细,默认为1 /XLog,/YLog:用于创建对数X|Y数轴 Max|Min_Value=value:绘制数据的最大|最小值 nSum=value:每个value个值绘制一个点 Background | Color=value:设定背景|前景色 PSYM=integer{-10~10}:按指定图形符号绘制数据点 LineStyle=integer{0~5}:0实线,1点,2虚线,3点虚线,4点点虚线,5长虚线

IDL> r=findgen(100). 01 IDL> t=4. Pi IDL> r=findgen(100)*0.01 IDL> t=4.0*!Pi*r IDL> Plot, r, t, /polar pSym=-2 pSym=5

OPlot绘制多线 OPlot使用方法与Plot的用法基本相同,区别在于连续使用OPlot时,可以在同一个坐标系中绘制多条直线或者曲线,而不擦除原 有内容。相当于Plot加 了/NoErase关键字。 x=findgen(101)*(0.01*2.0*!PI) Plot, x, sin(x) OPlot, x, cos(x), pSym=-2 OPlot, x, sin(x)*cos(x), $ linestyle=5, Thick=4

Plots绘制无坐标多线 Plots使用方法与Plot的用法基本相同,区别在于连续使用Plots时,可以在多个坐标系中绘制任意多条没有坐标轴的直线或者曲线,而不擦除原有内容。 除了与Plot相同的关键字外,Plots还有一个关键字/Continue,在最后一次的绘制点处继续连续绘制 x=[0, 10, 20, 30, 40] & y=[0, 0.8, 1, 0.6, 0] u=[50, 60, 70, 80] & v=[-0.3, -0.5, -0.3, 0] plots, x/2, y/2+0.5, pSym=-2 plots, u/2, v/2+0.5, pSym=-2, /continue plots, x/2, y/2+0.3, pSym=-6 plots, u/2, v/2+0.3, pSym=-6

Contour绘制等值轮廓线 Contour用于绘制坐标系中任意的等值轮廓线。 TVScl, DIST(100) Contour用于绘制坐标系中任意的等值轮廓线。 Contour的用法跟Plot的用法基本相同,也提供了许多关键字用于设置线、标注、坐标轴等元素的每一个细节。关键字/OverPlot的效果与Plot中/NO_ERASE具有相同的效果。 关键字Levels=vector用于设置每层对应的数值。

Surface Shade_Surf绘制网格面 Surface用于在坐标系中绘制任意的三维网格。与Plot的用法基本相同。AX|AZ = degree关键字用于设置网格面绕X|Z轴旋转的角度。/Lower_ONLY|Upper_ONLY设置只绘制底|顶面。 Shade=array指定一个二维数组作为表面纹理。 Shade_Surf与Surface用法基本相同,但能绘出带阴影的三维曲面。

Surface, Dist(16), $ /HORIZONTAL Surface, Dist(16) /LEGO Surface, Dist(16), $ SKIRT=4, LineStyle=4, thick=2 Surface的一些关键字及其效果

A=dist(300) & shade_surf, A Shades = BytScl(sin(A)) Shade_surf的一些关键字及其相应的效果

Plot_3DBox绘制投影曲线 Plot_3DBox适用于绘制三维数据(z=f(x,y))的投影曲线。 /XY|XZ|YZ_PLANE,绘制三个投影面。

体绘制 体绘制是指以体素作为基本单元,使用指定的模型和算法,由体数据直接生成三维虚拟实体影像的过程。 体绘制可以表现实体的外部形状和内部细节,可以结合面绘制技术,在绘制质量、速度、交互性和信息表现互为补充。 体绘制的几种办法 IDLgrVolume对象 xVolume过程 iVolume智能工具

体绘制 通过创建或初始化体绘制类IDLgrVolume对象。注意这里输入的数据将被转化成Byte类型。 Obj = OBJ_NEW('IDLgrVolume' [, vol0 [, vol1 [, vol2 [, vol3]]]] [, PROPERTY=value] [, /NO_COPY]) Result = Obj->[IDLgrVolume::]Init([vol0 [, vol1 [, vol2 [, vol3]]]] [, PROPERTY=value] [, /NO_COPY]) IDLgrVolume有多达36个属性,如Data0~4,RGB_table0~1, Opacity_table0~1, shader, clip_planes, ambient, X~ZRange, X~ZCoord_conv, ZBuffer等。

体绘制 xVolume:该过程用于交互查看和操作体数据和等值面。 XVOLUME, Vol, [, /BLOCK] [, GROUP=widget_id] [, /INTERPOLATE] [, /MODAL] [, RENDERER={0 | 1}] [, /REPLACE] [, SCALE=value] [, /TEST] [, XSIZE=pixels] [, YSIZE=pixels] Replace:使用存在的xVolume替换vol Render:设置渲染环境, 0为OpenGL(默认),1为IDL本身 xSize,ySize: 设置绘制窗口的大小 Interpolate:设置差值方式 Scale:设置体绘制的比例因子

iTool工具简介 iTool(Intelligent Tools)是拥有一些列交互功能的图形化智能工具包。 将数据分析、可视化任务和高品质图形表现结合在一起,集成一系列交互功能。 预建了iPlot, iSurface, iContour, iVolume, iMap, iImage, iVector等创建例程及IConvertCoord, IRotate, iSave, iZoom等各种程序例程。 iTool由IDL写成,既可作为独立程序交互使用,也可被其他程序调用或进行二次开发。

iVolume例子 file = FILEPATH('head.dat', SUBDIRECTORY = ['examples', 'data']) data0 = READ_BINARY(file, DATA_DIMS = [80, 100, 57]) data1 = BYTARR(80, 100, 57, /NOZERO) + 1B data1[0:39, *, 28:56] = 0B rgbTable1 = [[BYTARR(256)], [BYTARR(256)], [BYTARR(256)]] rgbTable1[1, *] = [255, 255, 255] opacityTable1 = BYTARR(256) opacityTable1[1] = 255 IVOLUME, data0, data1, $ RGB_TABLE1 = rgbTable1, $ OPACITY_TABLE1 = opacityTable1, $/AUTO_RENDER ;在iVolume中,data0和data1做alpha混合 从而实现切割效果

并行的IDL——FastDL简介 FastDL是Tech-X Corporation公司基于IDL开发的一款软件,它弥补了IDL在集群并行运算上面的不足,将IDL的计算能力发挥到最大。 针对并行的特点,FastDL提供了两个功能: TaskDL:用于处理各节点间互相独立的任务。 mpiDL:用于处理节点间需要传递消息的任务,与标准MPI的使用方法相同,以“MPIDL_”为函数前缀,比如MPIDL_Send, MPIDL_Receive, MPIDL_AllReduce, MPIDL_Gather, MPIDL_Barrier,MPIDL_Bcast等。 怎么运行MPIDL呢? 在运行程序之前先要做一点准备工作:可用节点的节点名和在该节点上可开启的mpi进程的最大数量 首先要在自己的目录下准备两个文本文件,一个用来记录MPIDL可用的节点的节点名,另一个记录着可用节点的节点名和在该节点上可开启的mpi进程的最大数量,这个数通常和该节点拥有CPU核的数量相等,但也可以小于或大于这个数,只是这样运行起来效率可能没那么高。比如本来8个核,但是你指定4个mpi进程,可能就有浪费,或者你指定16个进程,可能就有一半进程需要跟另一半进程串行执行。 比如我在自己的home目录下建两个文本文件,分别叫mpd.host和procfile,里边的记录如下 然后建立mpidl的运行环境,用mpdboot启动,-n选项指定使用的节点数,一共6个, -f 指定记录节点的文件, -r 指定使用的安全协议 这样就可以运行mpidl程序,运行mpidl程序用runmpidl 命令,-machinefile选项指定刚才我们建立的那个记录着节点的HostName和该节点上可开启的mpi进程的最大数量,该数量不能超过前面procfile中,冒号后面指定的数量之和

一个简单的TaskDL 基本步骤: PRO oFarm = OBJ_NEW(‘taskdl’) 1、创建TaskDL对象 oFarm->open_session oFarm->spawn_worker oFarm->add_task, ‘print, “Mysimple TaskFarm”’ oFarm->close_session Obj_destroy, oFarm END 基本步骤: 1、创建TaskDL对象 2、打开一个会话session 3、生成worker 4、添加任务 5、结束会话session 6、退出TaskDL 60

IDL使用中的小技巧 编辑>内容辅助 或 ALT+/ 尽量使用库函数而不是自己写函数: 丰富的库函数加快开发进度。 库函数通过严格测试,更健壮。 库函数内部做了优化,特别是对于矩阵运算,效率提高更明显。 可以用一个函数完成则不用两个函数,如需同时求Max和Min,给Max加上min参数,eg, a=max(Matrix, min=b),可同时求出max和min。 如用max,min等。代替类似 myMax = a gt b?a:b 的代码。 多使用指针,指针的运算效率高,但用完后记得及时释放。

特别提醒 < 和 >:不是逻辑判断,而是取最小和最大,如 a=a<1 <= 和 >= :不是逻辑判断,而是取最小和最大赋给左边 EQ=、LT=, MOD=, NE=, OR=……. 三目运算符 ?: 与C语言之比较: int c=4; c = (c<5? c:5); & printf(“%d\n”, c);4 c=4 & c = (c<5 ? c : 5) & print, c  5 逻辑判断与C相去甚远。 逻辑判断分以下几种情况: 字符型,整形和长整形的奇数,判断为真;反之,偶数和零,判断为假 非零的浮点型,双精度型和复数类型(包括float和double),判断为真;反之,零判断为假 非空的字符串类型,判断为真; 反之,空的字符串类型判断为假。 IDL中,c<5的意思是c与5当中取最小的,故结果为4,而IDL中,偶数当bool值,为假,故最终结果为5。 正确方法:c = (c gt 5 ? c : 5) 62

进一步学习IDL 经常用帮助。只需敲个” ? ”即调出帮助,外加一个空格和你想查的关键词,如“ ? Plot”即到你想查阅的主题Plot 参考书 IDL Programming Technique. David Fanning大师的经典巨著。从基础到应用,数据读取到可视化,从直接图形法到对象图形法,从代码格式到编程习惯,对IDL作了全方位阐述。http://dfanning.com/(最近上不去) Application Development with IDL. Ronn Kling著. 适合有一定IDL基础的使用。http://www.rlkling.com/ Power Graphics with IDL. Ronn Kling著. 着重介绍2D,3D可视化方面的编程 IDL官方培训教程系列 1) Introduction to IDL (初级) 2) Intermediate Programming and Analysis in IDL (中级) 3) Advanced Topics in IDL (高级)

天文学中的IDL 天文学中的IDL    The IDL Astronomy User's Library     http://idlastro.gsfc.nasa.gov/homepage.html     The SolarSoftWare (SSW) system     http://www.lmsal.com/solarsoft/ 

谢谢!