||
IDL支持0~8维数组,下标顺序先列后行。
数组创建函数
数据类型 | 创建全0数组 | 创建索引数组 |
字节 | bytArr() | bindgen() |
16位有符号整数 | intarr() | indgen() |
32位有符号长整数 | longarr() | lindgen() |
64位有符号整数 | long64arr() | l64indgen() |
16位无符号整数 | uintarr() | uindgen() |
32位无符号长整数 | ulongarr() | ulindgen() |
64位无符号整数 | ulong64arr() | ul64indgen() |
浮点数 | fltarr() | findgen() |
双精度浮点数 | dblarr() | dindgen() |
复数 | complexarr() | cindgen() |
双精度复数 | dcomplexarr() | dcindgen() |
字符串 | strarr() | sindgen() |
指针 | ptrarr | |
对象 | objarr() |
RandomU创建随机数组,返回一个或多个均匀分布的浮点型数组,元素值在[0,1]之间,例:a=randomu(400,[20,20]),400为seed
RANDOMN函数返回一个或多个正态分布的浮点型数组,这些数的平均为零,标准偏差为1。
用一对方括号创建,例如a=[1,2,3]
要用数组下标将另一个元素插入第二和第三个元素之间,可键入:vector=[vector[0:1],5,vector[2:3]]
bindgen : 创建一个字节型数组,数值等于其序号,如[0,1,2,3,......]。
bytarr : 创建一个字节型数组,每个元素的初始值为0。
cindgen : 创建一个复数型数组,实部数值等于其序号。
complexarr: 创建一个复数性数组,实部和虚部数值都等于0。
dblarr : 创建一个双精度型数组,每个元素的初始值为0。
dcindgen : 创建一个双精度复数数组,实部数值等于其序号。
dcomplexarr : 创建一个双精度复数数组,每个元素的初始值为0。
dindgen : 创建一个双精度数组,每个元素数值等于其序号。
findgen : 创建一个浮点型数组,每个元素数值等于其序号。
fltarr : 创建一个浮点型数组,每个元素的初始值为0。
identity : 创建一个恒等数组,对角线上的元素为1 ,其他元素为0。例如a = indentity(4) 那么a =
1.00000 0.000000 0.000000 0.000000
0.000000 1.00000 0.000000 0.000000
0.000000 0.000000 1.00000 0.000000
0.000000 0.000000 0.000000 1.00000
indgen : 创建一个整型数组,每个元素数值等于其序号。
intarr : 创建一个整型数组,每个元素的初始值为0。
L64INDGEN :创建一个64字节整型数组,每个元素数值等于其序号。
LINDGEN :创建一个长整型数组,每个元素数值等于其序号。
lon64arr : 创建一个64字节整型数组,每个元素的初始值为0。
lonarr : 创建一个长整型数组,每个元素的初始值为0。
make_arry : 创建一个给定数据类型,维数和初始值的数组。
objarr : 创建一个对象数组。
ptrarr : 创建一个指针型数组。
replicate : 创建一个数组,给定维数和数值。
sindgen : 创建一个字符串数组,每个元素等于其序号。
strarr : 创建一个字符串数组,初始每个元素的长度为0。
timegen : 创建一个双精度浮点型数组,每个元素表示儒略日期。
uindgen : 创建一个无符号整型数组,每个元素等于其序号。
uintarr : 创建一个无符号整型数组,每个元素的初始值为0。
ul64indgen : 创建一个无符号64字节整型数组,每个元素等于其序号。
ulindgen : 创建一个无符号长整型数组,每个元素等于其序号。
ulon64arr : 创建一个无符号64字节整型数组,每个元素的初始值为0。
ulonarr :创建一个无符号长整型数组,每个元素的初始值为0。
IDL中数组在内存中是按行存储的,这是因为IDL最初设计的目的是用来处理行扫描卫星数据。
3.1下标方式
数组名[下标]
数组名(下标)
下标的起始值是0
函数的调用格式为:函数名(参数),为了避免混淆,数组下标一般使用[]。
3.2向量方式
下标通过向量方式表示:
array=indgen(8)
indices=[0,1,3,4]
print,array[indices]
按块提取:
array=indgen(20,30)
subarray=array[5:9,11:14]
print,array[indices]
*表示所有行或列
subarray=array[*,11:14]
Plot, data[7,*]
subarray = data[5:*,*]
提取对角元素:
array=indgen(5,5)
函数名称 | 返回值 | 函数名称 | 返回值 |
n_elements | 数组元素数目 | variance() | 数组方差 |
size() | 数组大小和类型信息 | stddev | 数组标准差 |
min() | 数组最小值 | moment() | 均值、方差、倾斜度、频率曲线峰度 |
mean() | 均值 | product() | 计算数组中所有或部分元素的乘积。 |
max() | 数组最大值 | total() | 数组元素总和 |
factorial() | 计算数N的阶乘 |
摘自《IDL可视化工具入门与提高》
4.1.求大、求小和求余
IDL> arr=indgen(4)
IDL> print,arr 0 1 2 3IDL> print,arr>3
3 3 3 3IDL> print,arr<2
0 1 2 2IDL> print,arr mod 2
0 1 0 1
4.2.数组与数运算
IDL> ;数组加数
IDL> arr1=indgen(5)
IDL> print,arr1 0 1 2 3 4IDL> arr2=arr1+6IDL> print,arr2 6 7 8 9 10
4.3.数组与数组运算
数组与数组运算,结果中的元素个数与参与运算数组中最少的元素个数一致;多维数组需要转换为一维数组来运算
IDL> arr1=[2,4,6,8]
IDL> arr2=[3,5]
IDL> print,arr1+arr2 5 9
IDL> arr1=[[1,2,3],[4,5,6]]
IDL> arr2=[[1,2],[3,4]]
IDL> print,arr1+arr2 2 4
6 8
4.4.数组合并
数组与数组合并需要两个数组的行数或者列数相同
IDL> a=indgen(2,5)
IDL> b=indgen(4,5)
IDL> ;行数相同,可直接使用[]
IDL> c=[a,b]
IDL> help,c
C INT = Array[6, 5]
IDL> d=indgen(2,3)
IDL> ;列数相同,需要使用[[],[]]
IDL> e=[[a],[d]]
IDL> help,e
E INT = Array[2, 8]
where:
Syntax :Result = WHERE( Array_Expression [, Count] [, COMPLEMENT=variable] [, /L64] [, NCOMPLEMENT=variable] )
返回数组或数组表达式中的非零元素的下标
例如:index=where((arr gt 35) and ((arr mod 4) eq 0))查找数组中大于35同时又是4的倍数的元素。
5.1 REFORM函数
改变数组的维度,但不改变数组元素的总数、值及排列顺序。
5.2 Reverse函数
反转数组中元素的排列次序,Subscript_Index指定数组中反转的维,若省略,则反转第一维
5.3 Rotate函数
旋转一维和二维数组,Direction指定旋转的角度,取值0、1、2、3分别表示0、90、180、270度。
5.4 transpose
数组转置
5.5 SHIFT函数
沿着指定的维平移数组的元素,Array是输入数组。S1, ..., Sn分别是第1、2…N维平移量,正数右(下)移,负数左(上)移。函数返回平移后的数组,原数组不变。
5.6 Sort函数
返回Array中的元素按升序排列的下标。
5.7 UNIQ()返回数组中相邻元素不同值的索引
该数组智能发现相邻的值,若不相邻则会认为是两个值。如果先对数组进行排序,则可求出数组中包含的不同值。
UNIQ(Array, SORT(Array))
返回Array中升序排列的唯一值的下标
arr[uniq(arr[sort(arr)])]
5.8 Rot()可以任意角度对图像进行旋转,同时能进行放大和缩小控制。
5.9Array_Equal()判断两个数组是否完全相同
函数名称 | 功能 | 运算法则 |
Rebin() | 通过一个整数因子调整n-维数组的的大小 | 在默认情况下,对于放大使用线性内插法,缩小使用临近值平均法。最临近值抽样是可选项。 |
Congrid() | 调整数组至任意大小 | 默认情况下,采用最临近值抽样法。可选项是线性内插和3次卷积内插。 |
Interpolate() | 调整数组至任意大小。 | 在默认情况下,采用线性内插法,3次卷积内插是可选项。 |
函数名 | 函数描述 |
# ,## | 矩阵相乘 |
INVERT | 求逆 |
DETERM | 行列数求值 |
MATRIX_POWER | 矩阵乘积 |
8.1 矩阵相乘 (# ,##)
A#B表示A的列乘以B的行,要求A的行数必须跟B的列数一致
A##B表示A的行乘以B的列,此时要求A的列数必须与B的行数一致。
8.2矩阵求逆(INVERT)
Syntax:Result = INVERT( Array [, Status] [, /DOUBLE] )
8.3行列式求值(DETERM)
8.4 MATRIX_MULTIPLY
# Operator | Function |
A # B | MATRIX_MULTIPLY(A, B) |
transpose(A) # B | MATRIX_MULTIPLY(A, B, /ATRANSPOSE) |
A # transpose(B) | MATRIX_MULTIPLY(A, B, /BTRANSPOSE) |
transpose(A) # transpose(B) | MATRIX_MULTIPLY(A, B, /ATRANSPOSE, /BTRANSPOSE) |
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-5-29 13:23
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社