IDL中二维数组的抽取

    经常在IDL中遇到需要从大的二维数组中需要提取小的二维数组的情况。这里用矩阵乘法写了一个函数,可以实现从大的数组中提取子数组。这个函数返回的是要提取的数组的下标。

;从大的二维数组中提取一块区域
; r         原数组的行数
; c         原数组的列数
; ro        子数组在原数组中的起始行号
; co        子数组在原数组中的起始列号
; rs        子数组的行数
; cs        了数组的列数
function getIndex, r, c, ro, co, rs, cs
    rb = lindgen(cs, start=1,increment=0) # lindgen(rs, start=0, increment=c)
    cb = lindgen(cs, increment=1) # indgen(rs, start=1,increment=0)
    return, rb + cb + long(ro) * c + co
end

调用示例如下:

pro test
    r = 13
    c = 11
    dat = indgen(c,r)
    ro = 1
    co = 1
    rs = 7
    cs = 5
    index = getIndex(r, c, ro, co, rs, cs)
    ;print,pos
    print,index
end

调用结果如下图:

test过程的输出如下:

          12          13          14          15          16
          23          24          25          26          27
          34          35          36          37          38
          45          46          47          48          49
          56          57          58          59          60
          67          68          69          70          71
          78          79          80          81          82

这样做的好处是速度比使用循环要快一点,缺点是使用的内存会多一些。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值