假设想读出刚才建立的数组中位于第一列第二行的元素(元素的值为4),可以键入:
ENVI>print,array[0,1]
注意,下标的顺序先是列标,后是行标。这正好与已习惯的线性代数中的矩阵或行列式相反(同时,行标与列标比想象的小1,因为排列下标值的起始值是0而不是1)。
列-行下标源于对海量图像数据处理的要求,IDL最初就是为处理这种数据而开发的。数据中的一行对应图像的一个独立扫描行。这种数据存储形式使数据操作迅速而精确。当然,也有其他的软件刚好相反,采用行优先的方式,这就要求读者在不同软件之间转换数据时考虑到这一点。
可以使用一维下标来存取该数组中的每一个元素。要知道数组元素是以行顺序存储的,所以获得数组中的第四个元素。可以键入以下语句来存取:
ENVI>print, array[3]
用一维下标可以存取多维数组中的元素,这是IDL语言的一个强大的工具。
也可以用一维向量来做数组的下标。例如,倘若要存取数组中的第一,二,四和第六个元素,可键入:
ENVI>indices=[0,1,3,5]
ENVI>print,array[indices]
IDL可很容易地从数组内提取出矢量和子数组。例如:查看这个拥有随机数据的数组:
ENVI>data = randomU(seed, 10, 20)
想提取出第6-10列和第12-15行的数据,可键入:
ENVI>subarray = data[5:9, 11:14]
如果要将第8列的数据画出来,可以使用下标“*”代表所有的行,如下所示:
ENVI>plot, data[7,*]
要取出一个第14行的矢量,键入:
ENVI>vector = data[*,13]
要提取出一个数据为数组中最后5行的数组,键入:
ENVI>subarray = data[*,15:19]
ENVI>help, subarray
现在可以看到子数组是一个10列*5行的数组。
同样可以用“*”代表剩下的所有数据。例如,用数组的最后5列建立一个子数组,也可键入:
ENVI>subarray = data[5:*,*]
ENVI>help, subarray