【220】◀▶ IDL 数组操作函数说明

参考:Array Creation Routines —— 创建数组函数
参考:Array Manipulation Routines —— 操作数组函数


01   MAX 最大值。
02   MIN 最小值。
03   TOTAL 数组元素的总和。
04   PRODUCT 数组元素总乘积。
05   REVERSE 数组反转。
06   ROTATE 数组旋转。
07   ROT 任意角度旋转。
08   SORT 排序,从小到大,返回索引数组。
09   UNIQ  相邻唯一值,返回索引数组。
10   REFORM 调整数组的维度,元素个数不变。
11   REPLICATE_INPLACE  更新一个数组中一部分或者全部为指定的数值。
12   WHERE  返回符合条件的数组。
13   SIZE 返回值是数组,分别表示维度、列、行、类型、个数。
14   INDGEN 返回指定维度的数组。
15   FINDGEN & Others 返回指定维度的数组(浮点型)。
16   INTARR & Others 返回指定维度全是 0 的数组。
17   MAKE_ARRAY 动态创建数组。

序号 名称  

功能说明

  语法 & 举例
01 MAX  

最大值。
----------------------------------------------------------------------------------

Result = MAX( Array [, Max_Subscript] [, /ABSOLUTE] [, DIMENSION=value] [, MIN=variable] [, /NAN] [, SUBSCRIPT_MIN=variable])
----------------------------------------------------------------------------------
Max_Subscript:最大值对应的索引值,存在此变量中
 ABSOLUTE:去元素的绝对值进行比较

MIN=variable:获取最小值
SUBSCRIPT_MIN=variable:一维数组中的最小值的索引值

 
IDL> A = [3, 4, -5, -6, -3, 2, 1]
IDL> MAX(A)
       4
IDL> MAX(A, i_max)
       4
IDL> i_max
           1
IDL> MAX(A, /ABSOLUTE)
      -6
IDL> MAX(A, MIN=min)
       4
IDL> min
      -6
IDL> MAX(A, MIN=min, SUBSCRIPT_MIN=i_min)
       4
IDL> i_min
           3
 02 MIN

 

 

最小值。
----------------------------------------------------------------------------------
Result = MIN( Array [, Min_Subscript] [, /ABSOLUTE] [, DIMENSION=value] [, MAX=variable] [, /NAN] [, SUBSCRIPT_MAX=variable])
----------------------------------------------------------------------------------
Min_Subscript:最小值对应的索引值,存在此变量中
◈ ABSOLUTE:去元素的绝对值进行比较
MAX=variable:获取最大值
SUBSCRIPT_MAX=variable:一维数组中的最大值的索引值

 
IDL> A = [3, 4, -5, -6, -3, 2, 1]
IDL> MIN(A)
      -6
IDL> MIN(A, i_min)
      -6
IDL> i_min
           3
IDL> MIN(A, /ABSOLUTE)
       1
IDL> MIN(A, MAX=max)
      -6
IDL> max
       4
IDL> MIN(A, SUBSCRIPT_MAX=i_max)
      -6
IDL> i_max
           1
 03 TOTAL  

数组元素的总和。
----------------------------------------------------------------------------------
Result = TOTAL( Array [, Dimension] [, /CUMULATIVE] [, /DOUBLE] [, /INTEGER] [, /NAN] [, /PRESERVE_TYPE] )

 
IDL> A = INDGEN(11)
IDL> TOTAL(A)
       55.000000
 04 PRODUCT  

数组元素总乘积。
----------------------------------------------------------------------------------
Result = PRODUCT(Array [, Dimension] [, /CUMULATIVE] [, /INTEGER] [, /NAN] [, /PRESERVE_TYPE] )

 
IDL> A = [1, 2, 3, 4, 5]
IDL> PRODUCT(A)
       120.00000000000000
05 REVERSE  

数组反转。
----------------------------------------------------------------------------------
Result = REVERSE( Array [, Subscript_Index] [, /OVERWRITE] )
----------------------------------------------------------------------------------
Subscript_Index:指定维度索引值(1、2、3等)的一个整数值,1 是对行进行反转,2 是对列进行反转


◈ IDL 从影像上读取的数组的原点在左上角,为了转换成符合正常顺序的数组可以对其进行列的反转,即 REVERSE(image, 2)

 
IDL> A = INDGEN(5)
IDL> A
       0       1       2       3       4
IDL> REVERSE(A)
       4       3       2       1       0
-------------------------------------------------------------------------------------
IDL> B = INDGEN(5, 2)
IDL> B
       0       1       2       3       4
       5       6       7       8       9
IDL> REVERSE(B)
       4       3       2       1       0
       9       8       7       6       5
IDL> REVERSE(B, 2)
       5       6       7       8       9
       0       1       2       3       4
06 ROTATE  

数组旋转。
----------------------------------------------------------------------------------
Result = ROTATE(Array, Direction)
----------------------------------------------------------------------------------
Direction:旋转角度所对应的数值,1-顺时针90°,2-180°中心对称,3-逆时针90°

 
IDL> C = INDGEN(3, 3)
IDL> C
       0       1       2
       3       4       5
       6       7       8
IDL> ROTATE(C, 1)
       6       3       0
       7       4       1
       8       5       2
07 ROT  

任意角度旋转。
----------------------------------------------------------------------------------
Result = ROT( A, Angle, [Mag, X0, Y0] [, /INTERP] [, CUBIC=value{-1 to 0}] [, MISSING=value] [, /PIVOT] )
----------------------------------------------------------------------------------
Angle:顺时针旋转的角度值

 
IDL> C = INDGEN(3, 3)
IDL> C
       0       1       2
       3       4       5
       6       7       8
IDL> ROT(C, 90)
       2       5       8
       1       4       7
       0       3       6
08 SORT  

排序,从小到大,返回索引数组。
----------------------------------------------------------------------------------
Result = SORT(Array [, /L64] )

 
IDL> A = [4, 3, 7, 1, 2]
IDL> SORT(A)
           3           4           1           0           2
IDL> A[SORT(A)]
       1       2       3       4       7
IDL> A[REVERSE(SORT(A))]
       7       4       3       2       1
IDL> REVERSE(A[SORT(A)])
       7       4       3       2       1
09 UNIQ  

相邻唯一值,返回索引数组。
----------------------------------------------------------------------------------
Result = UNIQ( Array [, Index] )
----------------------------------------------------------------------------------
◈ Index:用于处理成递增、唯一的数组

 
IDL> array = [1, 2, 2, 5, 6, 6, 5]
IDL> UNIQ(array)
           0           2           3           5           6
IDL> array[UNIQ(array)]
       1       2       5       6       5
IDL> UNIQ(array, SORT(array))
           0           1           3           4
IDL> array[UNIQ(array, SORT(array))]
       1       2       5       6
 10 REFORM   调整数组的维度,元素个数不变。
----------------------------------------------------------------------------------
Result = REFORM( Array, D1[, ..., D8] [, /OVERWRITE] )
----------------------------------------------------------------------------------
◈ Di:维度调整,保证元素个数相同,否则无法实现
◈ OVERWRITE:将返回的数组值赋值给 Array

 
IDL> A = INDGEN(2, 3)
IDL> A
       0       1
       2       3
       4       5
IDL> REFORM(A, 3, 2)
       0       1       2
       3       4       5
IDL> REFORM(A, 3, 2, /OVERWRITE)
       0       1       2
       3       4       5
IDL> A
       0       1       2
       3       4       5
 11 REPLICATE_INPLACE  

更新一个数组中一部分或者全部为指定的数值。
----------------------------------------------------------------------------------
REPLICATE_INPLACE, Array, Value [, D1, Loc1 [, D2, Range]]
----------------------------------------------------------------------------------
Value:欲更新的数值
D1:欲更新的维度,1 为行,2 为列
◈ Loc1:坐标点所在行或列
----------------------------------------------------------------------------------
等效替换方法如下:
Array[*] = Value:数列都赋值 Value
Array[*, 1] = Value:整个第二行都赋值 Value
Array[*, 2:4] = Value:整个第三行到第五行都赋值 Value

 
IDL> A = INDGEN(3, 3)
IDL> A
       0       1       2
       3       4       5
       6       7       8
IDL> REPLICATE_INPLACE, A, 4
IDL> A
       4       4       4
       4       4       4
       4       4       4
IDL> A[*] = 5
IDL> A
       5       5       5
       5       5       5
       5       5       5
IDL> A[*, 2] = 0
IDL> A
       5       5       5
       5       5       5
       0       0       0
IDL> REPLICATE_INPLACE, A, 4, 1, [1, 1]
IDL> A
       5       5       5
       4       4       4
       0       0       0   
IDL> REPLICATE_INPLACE, A, 8, 2, [0, 0]
IDL> a
       8       5       5
       8       4       4
       8       0       0
 12 WHERE  

返回符合条件的数组。
----------------------------------------------------------------------------------

Result = WHERE( Array_Expression [, Count] [, COMPLEMENT=variable] [, /L64] [, NCOMPLEMENT=variable] [, /NULL] )
----------------------------------------------------------------------------------

Array_Expression:数组表达式
◈ Count:返回数组的元素个数
COMPLEMENT=variable:返回剩余数组中元素的索引数组
NCOMPLEMENT=variable:返回剩余数组中元素的个数

 
IDL> A = INDGEN(10)
IDL> A
       0       1       2       3       4       5       6       7       8       9
IDL> WHERE(A GT 5, count, COMPLEMENT=c, NCOMPLEMENT=count_c)
           6           7           8           9
IDL> c
           0           1           2           3           4           5
IDL> count_c
           6
 13 SIZE  

返回值是数组,分别表示维度、列、行、类型、个数。
----------------------------------------------------------------------------------

Result = SIZE( Expression [, /L64] [, /DIMENSIONS | , /FILE_LUN | , /FILE_OFFSET | , /N_DIMENSIONS | , /N_ELEMENTS | , /SNAME, | , /STRUCTURE | , /TNAME | , /TYPE] )
----------------------------------------------------------------------------------

DIMENSIONS:列、行等
N_DIMENSIONS:维度
N_ELEMENTS:元素个数
TNAME:数据类型,文本型
TYPE:数据类型,数字码

 
IDL> A = INDGEN(5,5)
IDL> SIZE(A)
           2           5           5           2          25
IDL> SIZE(A, /N_ELEMENTS)
          25
IDL> SIZE(A, /DIMENSIONS)
           5           5
IDL> SIZE(A, /N_DIMENSIONS)
           2
IDL> SIZE(A, /TYPE)
           2
IDL> SIZE(A, /TNAME)
INT
14 INDGEN  

返回指定维度的数组。
----------------------------------------------------------------------------------

Result = INDGEN(D1[, ..., D8] [, /BYTE | , /COMPLEX | , /DCOMPLEX | , /DOUBLE | , /FLOAT | , INCREMENT=value | , /L64 | , /LONG | , /STRING | , /UINT | , /UL64 | , /ULONG] [, START=value] [, TYPE=value] )
----------------------------------------------------------------------------------

◈ Di:数组维度定义
◈ BYTE:创建 byte 数组
DOUBLE:创建 double 数组
FLOAT:创建 float 数组
INCREMENT=value:定义增量步长
START=value:开始整数设置,默认是 0
TYPE=value:数据类型数字码(SIZE)

 
IDL> INDGEN(5, INCREMENT=3)
       0       3       6       9      12
IDL> INDGEN(5, INCREMENT=3, START=10)
      10      13      16      19      22
IDL> INDGEN(5, INCREMENT=3, START=10, TYPE=4)
       10.000000       13.000000       16.000000       19.000000       22.000000
IDL> INDGEN(5, /FLOAT, START=10)
       10.000000       11.000000       12.000000       13.000000       14.000000
15 FINDGEN & Others  

返回指定维度的数组(浮点型)。
----------------------------------------------------------------------------------
Result = FINDGEN(D1 [, ..., D8] [, INCREMENT=value] [, START=value])

 
IDL> FINDGEN(5, START=1)
       1.0000000       2.0000000       3.0000000       4.0000000       5.0000000
 

BINDGEN:字节型
DINDGEN:双精度浮点型
LINDGEN:32位有符号长整型
L64INDGEN:64位有符号长整型
UINDGEN:16位无符号整形

SINDGEN:字符串

 
IDL> SINDGEN(5, START=5)
           5
           6
           7
           8
           9
16  INTARR & Others  

返回指定维度全是 0 的数组。
----------------------------------------------------------------------------------

Result = INTARR( D1[, ..., D8] [, /NOZERO] )

 
IDL> INTARR(3, 3)
       0       0       0
       0       0       0
       0       0       0
 

FLTARR:浮点型
BYTARR:字节型
DBLARR:双精度浮点型
LONARR:32位有符号长整型
LON64ARR:64位有符号长整型
UINTARR:16位无符号整形
STRARR:字符串

   
 17 MAKE_ARRAY   

动态创建数组。
----------------------------------------------------------------------------------

Result = MAKE_ARRAY ( [D1[, ..., D8]], DIMENSION=vector, INCREMENT=value, /INDEX, /NOZERO, SIZE=vector, START=value, TYPE=type_code, VALUE=value, /BOOLEAN, /BYTE, /COMPLEX, /DCOMPLEX, /DOUBLE, /FLOAT, /INTEGER, /L64, /LONG, /OBJ, /PTR, /STRING, /UINT, /UL64, /ULONG )
----------------------------------------------------------------------------------

INCREMENT=value:增量步长
INDEX:等差增加
NOZERO:不出现0值,默认情况下是0值
◈ START=value:开始的数值
◈ TYPE=type_code:返回值的类型,0为Undefined、1为Byte、2为Int等
◈ VALUE=value:设置固定值
◈ BOOLEAN:设置一个布尔型数组

 
IDL> MAKE_ARRAY(4, 3, VALUE=5, /INTEGER)
       5       5       5       5
       5       5       5       5
       5       5       5       5
IDL> MAKE_ARRAY(4, 3, /INDEX, /INTEGER)
       0       1       2       3
       4       5       6       7
       8       9      10      11
IDL> MAKE_ARRAY(4, 3, /INDEX, INCREMENT=2, /INTEGER)
       0       2       4       6
       8      10      12      14
      16      18      20      22
IDL> MAKE_ARRAY(4, 3, /INDEX, INCREMENT=2, START=5, /INTEGER)
       5       7       9      11
      13      15      17      19
      21      23      25      27
           
原文地址:https://www.cnblogs.com/alex-bn-lee/p/5805358.html