IDL笔记:创建数组的函数

Python与开源GIS

IDL笔记:创建数组的函数

2015-01-28 作者: giser 浏览: 2484 次

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

创建数组的函数

零数组与索引数组

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

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

关注“开源集思”公众号
获取免费资源

随机推荐


Copyright © 2014-2019 OSGeo中国中心 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org