IDL笔记:创建数组的函数


发布日期 : 2025-12-23 07:11:39 UTC

访问量: 310 次浏览

创建数组的函数

零数组与索引数组

IDL的內建函数允许用户按给定的类型创建数组,同时数组中的每一个元素都被初始化为零,或被初始化为该元素在数组中的索引值(下标值),即元素在数组中的位置。 例如, 创建一个六元素的零数组和索引数组:

IDL>zeros=intarr(6)
IDL>index=indgen(6)
IDL>print,zeros,index
0 0 0 0 0 0
0 1 2 3 4 5

在索引数组中,元素的值按步长为1连续增长。在多维索引数组中,索引值按数组最左边的维度增长, 例如:

IDL> uu = indgen(15)
IDL> xx = reform(uu, 5,3)
IDL> print ,xx
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14

同值数组

“replicate”函数将创建一个特定维度的数组,并将某个标量复制到该数组中:

Arr = replicate(2.0, 4, 2)
Print, arr

创建多维数组

另外, “make_array”函数将创建一个特定维度的数据,该数组可以是零数组、索引数组或具有某个特定值的数组。为了创建这样一个零数组,其维度和类型表示如下:

IDL>zeroed=make_array(3,2,/byte)
IDL>print,zeroed
0 0 0
0 0 0

创建多维索引数组,必须使用“index”关键字:

IDL>index=make_array(4,3,/float,/index)
IDL>help,index
INDEXFLOAT =Array[4,3]
IDL>print,index
0.00000 1.00000 2.000003.00000
4.00000 5.00000 6.000007.00000
8.00000 9.00000 10.0000 11.0000

创建每个元素同值的数组,则需要使用“value”关键字:

IDL>arr=make_array(6,/long,value=32L)
IDL>help,arr
ARR LONG=Array[6]
IDL>print,arr
32 32 32 32 32 32

如果在IDL程序运行之前用户并不知道数组的大小和类型,则此时“make_array()”函数尤为重要。

浮点网格数组

IDL中可以以任意步长创建精确而有效的一维网格数组。例如, 要求创建这样一个浮点数组:它的元素值从1000.0按步长0.1均匀的上升到1010.0。首先, 数组首尾的值和数组的大小应定义为浮点变量:

IDL>x1=1000.0
IDL>x2=1010.0
IDL>dx=0.1

然后,数组元素的数目利用“floor”函数计算(为了避免舍入的误差,加上了1.0e-5):

IDL>nx=floor((x2-x1)/dx+1.0e-5)+1L
IDL>help,nx
NX LONG=101

下面计算网络数组的值。作为例子我们显示数组最后5个元素的值,并精确到小数点后4位:

IDL>arr=lindgen(nx)*dx+x1
IDL>help,arr
ARR FLOAT =Array[101]
IDL>print,arr[96:100],format='(5f11.4)'
1009.60001009.7000 1009.8000 1009.9000 1010.0000

网格数组不能通过累加来创建,因为累加所产生的舍入误差将会是数组元素的值越来越不精确:

IDL>arr=fltarr(nx)
IDL>arr[0]=x1
IDL>for index=1,(nx-1) do arr[index]=arr[index-1]+dx
IDL>print,arr[96:100],format='(5f11.4)'
1009.5977 1009.6976 1009.7976 1009.8976 1009.9976

除了不精确的问题,累加的方法使用了效率不高的循环过程来计算网格数组。