【IDL】 数组下标转换一维坐标索引函数:array_indices_reverse
首先看下Array_Indices的功能,将数组的一维下标转换到数组的对应维上去:
| 
 IDL> void = where(arr eq 14) IDL> idx = where(arr eq 14) IDL> print,idx 14 IDL> print,array_indices(arr,idx) 4 1 IDL> print,arr[4,1] 14  | 
那么反过来呢,比如arr = indgen(4,5,6)和索引数组inxarr = [2,3,4]能否快速求arr[2,3,4]的值呢?
直接用变量下标的方式是不通的,IDL会认为是三个单独的下标,即:
| 
 IDL> arr = indgen(4,5,6) IDL> idx = [2,3,4] IDL> print,arr[2,3,4] 94 IDL> print,arr[idx] 2 3 4  | 
解决方法有下面两个:
1) 利用Execute函数,示例代码
| 
 IDL> arr = indgen(4,5,6) IDL> idx = [2,3,4] IDL> str = 'result=arr[' IDL> for i=0,n_elements(idx)-1 do str = str+string(idx[i])+',' IDL> void = execute(str+'0]') IDL> print,result 94  | 
2) 利用函数array_indices的反函数array_indices_reverse,示例代码
| 
 IDL> dirIdx = array_indices_reverse(arr,idx) IDL> print,arr[dirIdx] 94  | 
附array_indices_reverse函数代码:
; 函数名:
;  array_indices_reverse
;
; 说明:
;   输入一个数组和多维下标,返回其一维下标索引
;   可以看作是Array_indices的反函数
;
; 调用方法
;  Result = array_indices_reverse (Array, Index)
;
; 返回值
;   返回索引下标数组对应的一维下标值
;
; 调用示例:
;IDL> arr = indgen(7,8,4,5)
;IDL> print,arr[2,3]
;     23
;IDL> print,array_indices_reverse(arr,[2,3])
;         23
;IDL> print,arr[5,3,2]
;    138
;IDL> print,array_indices_reverse(arr,[5,3,2])
;        138
;
; 版本历史:
;  Written by: DYQ 2011年10月29日
;- 
function array_indices_reverse, array, indexArr, DIMENSIONS=dimensions
   compile_opt idl2
   ON_ERROR, 2
   
   ;错误检测
    if (N_PARAMS() ne 2) then $
       MESSAGE, 'Incorrect number of arguments.'
   ;数组的下标
   arrDims = size(array,/dimen)
   ;下标个数   
   idxNum  = N_Elements(indexArr)
  if idxNum GT 1 then return,long(indexArr[idxNum-1]*product(arrDims[0:idxNum-2])+array_indices_reverse(array,indexArr[0:idxNum-2])) $
  else return,indexArr
end

本文来自地理遥感生态网平台www.gisrs.cn,作者:地理遥感生态网平台,转载请注明原文链接:https://www.cnblogs.com/gisrs365/p/18273084
                    
                
                
            
        
浙公网安备 33010602011771号