IDL可视化入门与提高

  • 格式:doc
  • 大小:258.00 KB
  • 文档页数:25

第二章IDL可视化入门与提高2.1 交互式与编译式2.1.1 交互式模式交互式模式可以利用简洁有效的单行命令快速进行数据分析和实现可视化。

在交互式模式下,命令在IDL提示符下输入,并且当用户按回车键时执行输入如下命令:X = findgen(201)*0.1 ; 创建一个包含了201个元素的浮点数组,第一个元素为0.0,步长为0.1Y = sin(x) ;创建浮点数组x的正弦函数数组Plot,x,y; 绘出sin(x)的函数交互模式最大的有点是,用户工作的结果能迅速地在图像、图形等窗口中实现可视化2.1.2 编译模式在此先不做介绍2.2变量IDL创建变量时,不需要对变量进行类型声明IDL> var = 2.0;创建一个浮点型变量,对变量进行初始化IDL> help,varVAR FLOAT = 2.00000重新定义为整型IDL> var = 2;创建一个整型变量,对变量进行初始化IDL> help,varVAR INT = 22.2.2跟踪变量类型无论在IDL的命令行,还是在IDL的程序中,使用“help”命令始终是帮助显示变量类型和大小的有效途径对于标量类自变量在上列中以给出说明,在此不做赘述对于数组类变量,“help”命令显示自变量的名称、大小、类型IDL> arr = [12,13,14]IDL> help,arrARR INT = Array[3]2.2.3数据类型的转换IDL自身提供了变量转换函数IDL> x = 3.141567IDL> help,xX FLOAT = 3.14157IDL> fix(x)fix(x)^% Syntax error.IDL> x = fix(x)IDL> help,xX INT = 3IDL> x = byte(x)IDL> help,xX BYTE = 3如果要转换为byte,字节型变量,在转换的过程中只有最不重要的八位会转换过来,即最后面的八位列入:Var = 567;567转换为二进制为1000110111Var = byte(var); 只会保留最后面的八位,0110111Help,var;最后得到的结果是55IDL中默认的整数数据是16为有符号整型2.2.4浮点数想整型的转换当fix 和long函数使用于浮点型变量向整数型变量转换时,将会发生截断现象IDL> x = [4.23,4,56]IDL> print,x4.23000 4.00000 56.0000IDL> print,fix(x)4 4 56IDL> arr = [3.14,7.89,-5.7,-9.8]IDL> print,arr3.14000 7.89000 -5.70000 -9.80000IDL> print,fix(arr)3 7 -5 -9IDL> ;xIDL> ;将浮点数组转换为整数型数组,数组中所用元素舍去小数点后的数字IDL> print,long(arr)3 7 -5 -9IDL> print,round(arr);对数组中的每个元素进行四舍五入3 8 -6 -10IDL> print,floor(x);小于或等于自变量且最接近自变量的长整型整数4 4 56IDL> print,floor(arr)3 7 -6 -10IDL> print,cei(arr);大于或等于且最接近自变量的长整型整数% Variable is undefined: CEI.% Execution halted at: $MAIN$IDL> print,ceil(arr)4 8 -5 -92.2.5字符串和数字类型之间的转换字符串变量可以转换为数字类型(里面含有数字数值)IDL> print,float('3.2')3.20000IDL> print,float('123abc')123.000如果不包含数字数值,那么在转换时IDL会给出一个警告信息,并输出解果0 IDL> print,float('wode')% Type conversion error: Unable to convert given STRING to Float.% Detected at: $MAIN$0.000000当变量的字节类型向字符串类型转换时,输出结果是一个标量变量,该变量是对应于输入变量的ASCII码字符IDL> print,string([47B,48B])/0当变量的字符串类型想字节类型转换时,输出结果是一个数组,其元素值是对应于输入字符串中每个字符的ASCII值IDL> help,byte('ABC')<Expression> BYTE = Array[3]IDL> print,byte('ABC')65 66 672.2.6变量的名称IDL中变量的名称必须以字母开头,它们可以包括其他字母、数字、下划线、美元符号。

2.3数组简介在IDL中可以为任何IDL数据类型创建1~8维数组。

紧凑的数组语法能保证数组运行时不适用循环操作。

数组操作的优点体现在运行速度上2.3.1创建数组在IDL中利用方括号【】,创建数组创建一维数组IDL> x = [1,2,3,4,5]IDL> help,x;用于显示x的大小X INT = Array[5]IDL> print,x;输出x的值1 2 3 4 5创建多维数组IDL> x = [[1,2,3],[4,5,6]];创建两行三列的数组IDL> print,x1 2 34 5 6IDL> ;输出xIDL> help,xX INT = Array[3, 2]IDL> ;输出x的横列号,对于IDL中的数组【m,n】,m为列,n为行值可以附加到已经存在的数组中IDL> y = [[x],[6,7,8]]IDL> print,x1 2 34 5 6IDL> print,y1 2 34 5 66 7 82.3.3创建数组的函数IDL的内建函数允许用户按给定的类型创建数组,同时数组中的每一个元素都被初始化为0(intarr),或被初始化为在数组中的索引值(indgen)IDL> zeros = intarr(6);创建一个元素值都为0的数组IDL> help,zerosZEROS INT = Array[6]IDL> print,zeros0 0 0 0 0 0IDL> print,float(zeros);转换为浮点数组0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 IDL> index = indgen(6);创建索引数组IDL> print,index0 1 2 3 4 5IDL> index = indgen(3,5)IDL> help,indexINDEX INT = Array[3, 5]IDL> print,index;建立多维索引数组0 1 23 4 56 7 89 10 1112 13 14Replicate函数将创建一个特定维数的数组,并将某个标量值复制到该数组中IDL> arr = replicate(5,3,2);创建元素值为5的2行3列数组IDL> print,arr;输出数组5 5 55 5 5Make_array函数将创建一个特定维数的数组,给数组可以是零数组IDL> zeroed = make_array(3,2)IDL> print,zeroed0.000000 0.000000 0.0000000.000000 0.000000 0.000000创建索引数组IDL> index = indgen(6);创建索引数组IDL> print,index0 1 2 3 4 5IDL> index = indgen(3,5)IDL> help,indexINDEX INT = Array[3, 5]IDL> print,index0 1 23 4 56 7 89 10 1112 13 14IDL> arr = replicate(5,3,2);创建元素值为2的2行3列数组IDL> print,arr;输出数组5 5 55 5 5IDL> zeroed = make_array(3,2,/fix)% Keyword FIX not allowed in call to: MAKE_ARRAY% Execution halted at: $MAIN$IDL> zeroed = make_array(3,2)IDL> print,zeroed0.000000 0.000000 0.0000000.000000 0.000000 0.000000IDL> index = make_array(3,2,/float,/index);创建一个两行三列的数组,数组中的元素类型为浮点型,元素值为索引值IDL> print,index0.000000 1.00000 2.000003.000004.000005.00000IDL> index = make_array(6,\long,value = 32L);创建一个数组元素为32的长整型索引数组index = make_array(6,\long,value = 32L);创建一个数组元素为32的长整型索引数组^% Illegal character in program text.IDL> index = make_array(6,/long,value = 32L);创建一个数组元素为32的长整型数组IDL> help,indexINDEX LONG = Array[6]IDL> print,index32 32 32 32 32 322.3.4浮点网格数组IDL中可以任意步长创建精确而有效的一维网格数组。

要求创建这样的一个浮点数组,它的元素值从1000.0按步长0.23均匀地上升到1010.0.IDL> x1 = 1000.0IDL> x2 = 1010.0IDL> dx = 0.25IDL> a = 1.0e-5+2IDL> print,a2.00001IDL> nx = floor((x2-x1)/dx)+1LIDL> help,nxNX LONG = 41IDL> arr = lindgen(nx)*dx + x1;创建一个含有nx个元素,步长为dx的数组IDL> help,arrARR FLOAT = Array[41]IDL> print,arr[39:41],format = '(5f11.4)'% Subscript range values of the form low:high must be >= 0, < size, with low <= high: ARR.% Execution halted at: $MAIN$IDL> print,arr[38:40],format='(5f11.4)'1009.5000 1009.7500 1010.00002.4数组下标第一种形式是将下表用方括号括起来以形成一个数组的名称IDL> arr = indgen(10)*3;创建以为索引数组,数组的步长为3IDL> print,arr0 3 6 9 12 15 18 21 24 27 IDL> index = 5IDL> print,arr[index]15IDL> print,arr,format='(5i6)'0 3 6 9 1215 18 21 24 27IDL> print,arr[7]21第二种形式是将下标用方括号括起来,并将数组的描述放在小括号内IDL> index = 5;IDL> print,(arr*10)[index]150数组下标同样可以表示为数组的形式IDL> index = [3,5,7,4,2]IDL> print,arr[index]9 15 21 12 6当使用下标表示数组的形式时,如果某些下标超出了范围,则该下标将被转换为在允许范围内的最小或最大值IDL> index = [-1,0,6,9,1000]IDL> print,arr[index]0 0 18 27 272.4.1数组下标的示例IDL> arr = indgen(8)*8;创建步长为8的索引数组IDL> print,arr0 8 16 24 32 40 48 56IDL> ;标量下标IDL> print,arr[5]40IDL> ;下标范围IDL> print,arr[3:5]24 32 40IDL> ;所有下标IDL> print,arr[*]0 8 16 24 32 40 48 56IDL> ;从特定下标之后的所有下标IDL> print,arr[5:*]40 48 56IDL> ;下标用数组表示IDL> index = indgen(2)IDL> print,arr[index]0 8IDL> ;下标用变量表达式表示IDL> i = 3IDL> print,arr[i-1:i+1]16 24 322.4.2多维数组下标的示例IDL> arr = indgen(5,3)*2IDL> print,arr0 2 4 6 810 12 14 16 1820 22 24 26 28IDL> ;标量的下标,取12IDL> print,arr[2,1]14IDL> ;包含所有第一行元素的下标IDL> print,arr[*,0]0 2 4 6 8IDL> ;包含所有第一列元素的下标IDL> print,arr[0,*]1020IDL> ;跨越两个维度的下标IDL> print,arr[0:2,0:1]0 2 410 12 142.4.3一维下标无论数组的维数是多少,它总可以用一位数组来表示。