青未了分享 http://blog.sciencenet.cn/u/yanghang

博文

IDL数组操作

已有 22861 次阅读 2015-4-30 20:55 |个人分类:IDL学习笔记|系统分类:科研笔记

1.创建数组

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。


2.数组的存储

        IDL中数组在内存中是按行存储的,这是因为IDL最初设计的目的是用来处理行扫描卫星数据。


3.数组的使用

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)


3.计算关于数组性质的某些信息的函数


函数名称返回值函数名称返回值
n_elements数组元素数目variance()数组方差
size()数组大小和类型信息stddev数组标准差
min()数组最小值moment()均值、方差、倾斜度、频率曲线峰度
mean()
均值product()计算数组中所有或部分元素的乘积。
max()数组最大值total()数组元素总和
factorial()计算数N的阶乘

摘自《IDL可视化工具入门与提高》


4.数组运算

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]


5.数组元素定位函数

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的倍数的元素。

6.数组的重新排列

5.1 REFORM函数

   改变数组的维度,但不改变数组元素的总数、值及排列顺序。

5.2 Reverse函数

   反转数组中元素的排列次序,Subscript_Index指定数组中反转的维,若省略,则反转第一维

5.3 Rotate函数

   旋转一维和二维数组,Direction指定旋转的角度,取值0123分别表示090180270度。

5.4 transpose

      数组转置

5.5 SHIFT函数

   沿着指定的维平移数组的元素,Array是输入数组。S1, ..., Sn分别是第12…N维平移量,正数右()移,负数左()移。函数返回平移后的数组,原数组不变。

5.6 Sort函数

   返回Array中的元素按升序排列的下标。

5.7 UNIQ()返回数组中相邻元素不同值的索引

     该数组智能发现相邻的值,若不相邻则会认为是两个值。如果先对数组进行排序,则可求出数组中包含的不同值。

      UNIQ(Array, SORT(Array))

   返回Array中升序排列的唯一值的下标

   arr[uniq(arr[sort(arr)])]

5.8 Rot()可以任意角度对图像进行旋转,同时能进行放大和缩小控制。

5.9Array_Equal()判断两个数组是否完全相同

7. 数组大小的调整

函数名称

功能

运算法则

Rebin()

通过一个整数因子调整n-维数组的的大小

在默认情况下,对于放大使用线性内插法,缩小使用临近值平均法。最临近值抽样是可选项。

Congrid()

调整数组至任意大小

默认情况下,采用最临近值抽样法。可选项是线性内插和3次卷积内插。

Interpolate()

调整数组至任意大小。

在默认情况下,采用线性内插法,3次卷积内插是可选项。


8.矩阵运算

矩阵运算函数
函数名函数描述
# ,##矩阵相乘
INVERT求逆
DETERM行列数求值
MATRIX_POWER矩阵乘积








8.1 矩阵相乘 (# ,##)

        A#B表示A的列乘以B的行,要求A的行数必须跟B的列数一致

        A##B表示A的行乘以B的列,此时要求A的列数必须与B的行数一致。

 8.2矩阵求逆(INVERT)

          SyntaxResult = INVERTArray [, Status] [, /DOUBLE] )

8.3行列式求值(DETERM)

8.4 MATRIX_MULTIPLY

# Operator

Function

A # B

MATRIX_MULTIPLY(AB)

transpose(A) # B

MATRIX_MULTIPLY(AB, /ATRANSPOSE)

A # transpose(B)

MATRIX_MULTIPLY(AB, /BTRANSPOSE)

transpose(A) # transpose(B)

MATRIX_MULTIPLY(AB, /ATRANSPOSE, /BTRANSPOSE)




https://wap.sciencenet.cn/blog-346157-886512.html

上一篇:IDL读取数据
下一篇:IDL编译
收藏 IP: 210.72.27.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-29 13:23

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部