IDL 数组相关函数
1.信息获取
Size()函数能够获取数组的相关信息。不设置关键字是,函数返回变量的基本信息:第一个返回值是变量的维数N_dims,但当变量是敞亮或未定义是返回值为0;第二个 到第N_dims+1个返回值依次对应每一维数值;倒数第二个返回值是数组类型代码;最后一个返回值是元素总个数。若设置关键字N_Dimensions、N_Elements、Dimensions、Tname和Type,则依次返回数组的维数、元素个数、每一维的位数、类型名称和类型代码信息。
IDL> var=5
IDL> ;依次为0维 整数 共1个元素
IDL> print,size(var)
0 2 1
IDL> str=['abc','def']
IDL> ;依次对应1维 1维上2个元素 字符串型 共两个元素
IDL> print,size(str)
1 2 7 2
IDL> arr=findgen(5,6)
IDL> help,size(arr,/N_elements)
<Expression> LONG = 30
IDL> help,size(arr,/Dimensions)
<Expression> LONG = Array[2]
2,.条件查询
函数WHERE()能返回数组中满足指定条件的元素下标。调用格式为
Result=Where(数组表达式[,count][,Complement=变量1][,/L64][,NCOMPLEMENT=变量2])
其中,关键字count返回符合指定条件的元素个数;变量1为不满足条件的数组元素下标;变量2为不满足条件的数组元素个数。
IDL> arr=indgen(10)
IDL> print,arr
0 1 2 3 4 5 6 7 8 9
IDL> result=where(arr GT 5,count,complement=res_c,ncomplement=res_n)
IDL> print,count
4
IDL> print,result
6 7 8 9
IDL> print,res_c
0 1 2 3 4 5
IDL> print,res_c
0 1 2 3 4 5
IDL> print,res_n
6
3.调整大小
(1) Reform()函数:可以在不改变数组元素个数的前提下改变数组的维数。调用格式为
Result=Reform(Array,D1[,...,D8][,关键字])
IDL> arr=indgen(10,10,10)
IDL> b=reform(arr,200,5)
IDL> c=arr[0,*,*]
IDL> help,c
C INT = Array[1, 10, 10]
IDL> d=reform(arr[0,*,*])
IDL> help,d
D INT = Array[10, 10]
(2) Rebin()函数:可以修改数组大小,修改后数组的行数或列数必须是原数组行数或列数的整数倍。默认抽样算法是双线性内插法。调用格式为
Result=Rebin(数组,D1[,...,D8][,/Simple])
其中,Sample为使用最近临值抽样算法。
IDL> arr=[[0,6],[2,8]]
IDL> print,arr
0 6
2 8
IDL> print,rebin(arr,4,4)
0 3 6 6
1 4 7 7
2 5 8 8
2 5 8 8
IDL> print,rebin(arr,4,4,/sample)
0 0 6 6
0 0 6 6
2 2 8 8
2 2 8 8
IDL> print,rebin(arr,3,4)
% REBIN: Result dimensions must be integer factor of original dimensions
% Execution halted at: $MAIN$
(3) Congrid()函数:可以将数组调整为同维任意大小。处理以为或者二位数组时,默认算法是最近邻重采样;处理三维数组时,算法是双线性内插。在对数组进行缩小操作时,Rebin()函数进行差值处理;Congrid()函数仅进行重采样。调用格式为
Result=Congid(数组,X,Y,Z[,关键字])
其中,关键字INTERP为抽样采用线性内插;关键字CUBIC为卷积内插法
IDL> print,arr
0 6
2 8
IDL> print,congrid(arr,3,4)
0 6 6
0 6 6
2 8 8
2 8 8
(4) Interpolate()函数:可以将数组调整到同维任意大小,并支持任意定位差值。调用格式为
Interpolate(数组,X[,Y[,Z]][,关键字])
其中,X[,Y[,Z]]为待调整数组下标索引,可以是单个变量或数组。若X为0.5,则表示计算下标[0]和小标[1]中间位置的数值。关键字选择GRID为采用网格差值方式生成插值点;否则,采用线性内插方式。关键字Missing为插值点坐标超出数组自身坐标范围时赋予该值。
IDL> arr=findgen(2,2)
IDL> print,arr
0.000000 1.00000
2.00000 3.00000
IDL> print,interpolate(arr,[0,.5,1.5],[0,.5,1.5])
0.000000 1.50000 3.00000
IDL> print,interpolate(arr,[0,.5,1.5],[0,.5,1.5],/grid)
0.000000 0.500000 1.00000
1.00000 1.50000 2.00000
2.00000 2.50000 3.00000
IDL> print,interpolate(arr,[0,.5,1.5],[0,.5,1.5],/grid,missing=0)
0.000000 0.500000 0.000000
1.00000 1.50000 0.000000
0.000000 0.000000 0.000000
4.数组反转
Reverse()函数可以对数组进行翻转。调用格式为
Result=Reverse(数组,index[,/overwrite])
其中,关键字Index为数组的维数索引
IDL> arr=indgen(2,2)
IDL> print,arr
0 1
2 3
IDL> ;行反转
IDL> print,reverse(arr,1)
1 0
3 2
IDL> ;列反转
IDL> print,reverse(arr,2)
2 3
0 1
5.数组转置
调用格式
Result=Transpose(数组,[p])
其中关键字P为需要调整维数的数组列表,如不设置,则完全反转
IDL> arr=indgen(2,3,4)
IDL> help,arr
ARR INT = Array[2, 3, 4]
IDL> help,transpose(arr,[0,2,1])
<Expression> INT = Array[2, 4, 3]
IDL> help,transpose(arr,[2,1,0])
<Expression> INT = Array[4, 3, 2]
IDL> help,transpose(arr)
<Expression> INT = Array[4, 3, 2]
6.数组旋转
(1) Rotate()函数:可以以90°的整倍数角度对数组进行旋转操作。调用格式为
Result=Rotate(数组,Direction)
其中,Direction取值范围为0~7。对应的图像旋转方式见表
Direction | 是否转置 | 顺时针旋转角度 | 旋转后坐标X1 | 旋转后坐标Y1 |
0 | 否 | 0° | X0 | Y0 |
1 | 否 | 90 ° | Y0 | -X0 |
2 | 否 | 180 ° | -X0 | -Y0 |
3 | 否 | 270 ° | -Y0 | X0 |
4 | 是 | 0 ° | Y0 | X0 |
5 | 是 | 90 ° | -X0 | Y0 |
6 | 是 | 180 ° | -Y0 | -X0 |
7 | 是 | 270 ° | X0 | -Y0 |
Rotate()函数的调用示例代码如下:
IDL> arr=indgen(2,3)
IDL> print,arr
0 1
2 3
4 5
IDL> print,rotate(arr,1)
4 2 0
5 3 1
IDL> print,rotate(arr,2)
5 4
3 2
1 0
(2)Rot()函数:可以以任意角度对图像进行旋转,同时能进行放大和缩小控制。调用格式为
Result=Rot(数组,Angle,[Mag,X0,Y0],[关键字])
其中,Angle为数组旋转的角度,单位为度(°);Mag为放大的倍数;X0为旋转中心的X坐标,默认为列中心;Y0为旋转中心的Y坐标,默认为行中心;关键字选择PIVOT可控制旋转后(X0,Y0)点是否仍然在原图像中的位置,不设置则(X0,Y0)点在图像的中心位置。
IDL> data=bytscl(dist(256))
IDL> tv,data
IDL> tv,rot(data,33,1.5,/interp)
7.数组平移
Shift()函数可以基于指定平移量S1...Sn对数组进行第1...n维平移,其中,Si值为正表示向前平移;Si为负表示向后平移。调用格式为Result=Shift(数组,S1...Sn)
IDL> arr=indgen(5)
IDL> print,arr
0 1 2 3 4
IDL> print,shift(arr,1)
4 0 1 2 3
IDL> print,shift(arr,-1)
1 2 3 4 0
IDL> arr=indgen(4,4)
IDL> print,shift(arr,2)
14 15 0 1
2 3 4 5
6 7 8 9
10 11 12 13
IDL> print,shift(arr,1,1)
15 12 13 14
3 0 1 2
7 4 5 6
11 8 9 10
8.数组排序
Sort()函数实现数组的排序功能,返回结果是排序后数组的下标索引。调用格式为
Result=Sort(数组[,/L64])
IDL> arr=[5,2,1,3,4]
IDL> ;数组排序后索引
IDL> print,sort(arr)
2 1 3 4 0
IDL> ;排序后数组
IDL> print,arr[sort(arr)]
1 2 3 4 5
9.求不同值
Uniq()函数能返回数组中相邻元素不同值的索引。注意,该函数只能发现相邻值;若不相邻,则会认为是两个值。如果先对数组进行排序,则可求出数组中包含的不同值。调用格式为
Result=Uniq(数组[,Index])
IDL> arr=[5,2,1,3,4]
IDL> ;数组排序后索引
IDL> print,sort(arr)
2 1 3 4 0
IDL> ;排序后数组
IDL> print,arr[sort(arr)]
1 2 3 4 5
IDL> arr=[1,2,1,3,3]
IDL> print,arr[uniq(arr)]
1 2 1 3
IDL> print,arr[uniq(arr[sort(arr)])]
2 1 3
10.判断数组
Array_Equal(数组,/关键字)
其中,Result返回值为0或1;关键字No_TypeConv用于将两数组转换为同一类型,来判断数组元素是否相同;为1时,数组可直接比较,不转换数据类型。
IDL> arr1=[1,1]
IDL> arr2=[1b,1b]
IDL> print,array_equal(arr1,arr2)
1
IDL> print,array_equal(arr1,arr2,/no_typeconv)
0
11.求元素个数
IDL> arr=intarr(4,5,2)
IDL> print,n_elements(arr)
40
12.求最大值
Max()函数返回数组元素中的最大值。调用格式为
Result=Max(数组 [,关键字],min=变量1)
其中Result返回数组的最大值;变量1返回数组的最小值
IDL> arr=findgen(2,3,2)
IDL> print,arr
0.000000 1.00000
2.00000 3.00000
4.00000 5.00000 6.00000 7.00000
8.00000 9.00000
10.0000 11.0000
IDL> print,max(arr,min=minval)
11.0000
IDL> print,minval
0.000000
13.求最小值
Min()函数与Max()函数类似,但它返回数组元素的最小值。调用格式为
Result=min(数组 [,关键字],max=变量1)
其中,Result返回数组最小值;变量1返回数组最大值。
IDL> arr=findgen(2,3,2)
IDL> print,min(arr,max=maxval)
0.000000
IDL> print,maxval
11.0000
14.求和
Total()函数可以计算数组中所有或部分元素的和。调用格式为
Result=Total(数组,Dimension,[,关键字])
其中,Result返回数组元素求和结果;Dinension为求和元素的行列控制;Cumulative返回同大小数组,数组第i个元素值为0~i元素值的和;Double返回双精度值;integer返回整型值;preserve_type结果类型与原数组类型一致,设置该关键字时,double等关键字无效。
IDL> arr=findgen(2,3)
IDL> print,arr
0.000000 1.00000
2.00000 3.00000
4.00000 5.00000
IDL> ;数组求和
IDL> print,total(arr)
15.0000
IDL> ;新数组,每个值为原数组0-i个元素的和
IDL> print,total(arr,/cumulative)
0.000000 1.00000
3.00000 6.00000
10.0000 15.0000
IDL> ;按行求和
IDL> print,total(arr,1)
1.00000 5.00000 9.00000
IDL> ;按列求和
IDL> print,total(arr,2)
6.00000 9.00000
15.乘积计算
Product()函数计算数组中所有或部分元素的乘积。调用格式为
Result=product(数组,Dimension,[,关键字])
其中,关键字与total函数的基本一致。
IDL> arr=findgen(2,3)+1
IDL> print,arr
1.00000 2.00000
3.00000 4.00000
5.00000 6.00000
IDL> ;数组元素乘积
IDL> print,product(arr)
720.00000
IDL> ;新数组,每个值为原数组0-i个元素的乘积
IDL> print,product(arr,/cumulative)
1.0000000 2.0000000
6.0000000 24.000000
120.00000 720.00000
IDL> ;按行求乘积
IDL> print,product(arr,1)
2.0000000 12.000000 30.000000
IDL> ;按列求乘积
IDL> print,product(arr,2)
15.000000 48.000000
16.阶乘计算
Factorial()函数计算数N的阶乘,即N!。调用格式为
Result=factorial(数组,[,关键字])
其中,关键字Stirling返回结果为Stirling近似值,计算公式为N!=√(2πN)[N/e]N
IDL> ;求5的阶乘
IDL> print,factorial(5)
120.00000
17.平均值计算
Mean()函数计算数组元素平均值。调用格式为
Result=Mean(数组,[,关键字])
IDL> arr=[65,63,67,64]
IDL> print,mean(arr)
64.7500
18.方差计算
Variance()函数计算数组的方差。调用格式为
Result=Variance(数组,[,关键字])
IDL> arr=[1,1,1,2,5]
IDL> print,variance(arr)
3.00000
19.标准差计算
Result=Stddev(数组,[,关键字])
IDL> arr=[1,1,1,2,5]
IDL> print,stddev(arr)
1.73205
20.平均值、方差、倾斜度及频率曲线峰值计算
Moment()函数可以计算数组的平均值、方差、倾斜度及频率曲线峰态。调用格式为
Result=Moment(数组,[,关键字])
IDL> arr=[1,1,1,2,5]
IDL> print,moment(arr)
2.00000 3.00000 0.923760 -1.13333
IDL 数组相关函数的更多相关文章
- IDL 数组运算
1.求大.求小和求余 IDL> arr=indgen(4) IDL> print,arr 0 1 2 3 IDL> print,arr>3 3 3 3 3 IDL> pr ...
- 【220】◀▶ IDL 数组操作函数说明
参考:Array Creation Routines —— 创建数组函数参考:Array Manipulation Routines —— 操作数组函数 01 MAX 最大值. 02 MIN ...
- php -- php数组相关函数
array range ( mixed $low , mixed $high [, number $step ] ) 创建一个连续的数组 range('a','z'); foreach (range( ...
- PHP与ECMAScript_5_常用数组相关函数
PHP ECMAScript 长度 $length = count($array) length = array.length 增 array_unshift($array, new1,n ...
- IDL数组计算
函数 作用 min 最小值 max 最大值 total 求和 stddev 标准差 mean 平均值
- Perl数组和hash相关函数
Perl数组和hash相关函数 内置的数组函数有: each, keys, pop, push, shift, splice, unshift, values 内置的hash函数有: delete, ...
- 【227】◀▶ IDL 其他常用函数
参考:Programming and Control Routines —— 编程和控制函数 01 N_ELEMENTS 表达式或者变量的元素个数. 02 DEFSYSV 定义系统变量. 03 ...
- php数组使用小结
在PHP中,数组分为两类:索引数组和关联数组.二者可以单独使用,也可以混合使用. 1.一维数组 一维数组的定义也很简单,常用的有如下两种方式: 1.1 直接赋值 1: <?php 3: $dwq ...
- 细说php(六) 数组
一.数组概述 1.1 数组是复合类型 1.2 数组中能够存储随意长度的数据, 也能够存储随意类型的数据 二.数组的类型 2.1 索引数组: 下标是顺序整数作为索引 <?php $user[0] ...
随机推荐
- 第1阶段——u-boot分析之make 100ask24x0_config指令(1)
本文学习目标: 掌握"make 100ask24x0_config"指令在Makefile和mkconfig文件中是怎么实现配置芯片选型 1.执行make 100a ...
- ★电车难题的n个坑爹变种
哲学家都不会做的电车难题变异 此题会答清华北大 "电车难题(Trolley Problem)"是伦理学领域最为知名的思想实验之一,其内容大致是: 一个疯子把五个无辜的人绑在电车轨道 ...
- 201521123083《Java程序设计》第四周学习总结
[toc] 1. 本周学习总结 尝试使用思维导图总结有关继承的知识点. 2. 书面作业 1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 在这里 ...
- 201521123098 《Java程序设计》第2周学习总结
1. 本周学习总结 1. 熟悉了一些码云中储存eclipse中代码的操作,利于随时储存代码,避免U盘丢失导致代码丢失的问题: 2. 了解了如何从码云中提取已储存的代码: 3. 学会了如何创建动态数组, ...
- java课程设计--WeTalk(201521123072秦贞一)
在线群聊系统 1,团队课程设计博客链接 http://www.cnblogs.com/slickghost/p/7018105.html 个人负责模块或任务说明 负责模块:界面设计与实现 2,自己的代 ...
- JAVA课程设计——“小羊吃蓝莓”小游戏
JAVA课程设计--"小羊吃蓝莓"小游戏 1. 团队课程设计博客链接 http://www.cnblogs.com/HXY071/p/7061216.html 2. 个人负责模块或 ...
- Java课程设计 购物车系统(个人博客) 201521123052 蓝锦明
1. 团队课程设计博客链接 课程设计团队博客 2. 个人负责模块或任务说明 (1)制作图形菜单引导界面 (2)定义各获取和输出类函数 3. 自己的代码提交记录截图 4. 自己负责模块或任务详细说明 i ...
- 201521123113《Java程序设计》第9周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何 ...
- Git 查看/修改用户名、邮箱
用户名和邮箱地址的作用 用户名和邮箱地址是本地Git客户端的一个变量,不随git库而改变. 每次commit都会用用户名和邮箱纪录. github的contributions统计就是按邮箱来统计的. ...
- Python的自学之路:Python基础(一)
声明:我写博客不是为了什么,只是为了记录自己的学习状态,学过的知识点!方便以后进行好的复习!python小白,勿喷 python环境的搭建,在这里就不细说了,这里有我的链接,可以参考一下:https: ...