【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
           


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM