LearningENVI&IDL分享 http://blog.sciencenet.cn/u/dongyanqing Learning ENVI&IDL

博文

数组下标转换一维坐标索引函数:array_indices_reverse

已有 7046 次阅读 2011-10-30 12:43 |个人分类:IDL技术|系统分类:科研笔记| 一维, IDL, 数组下标

首先看下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 20111029

;-

 

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

 



https://blog.sciencenet.cn/blog-344887-502668.html

上一篇:IDL中生成随机数
下一篇:“对COM组件的调用返回了错误HRESULT E_FAIL”的错误分析
收藏 IP: 27.128.228.*| 热度|

1 杨华磊

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

数据加载中...

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

GMT+8, 2024-3-29 05:30

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部