提高IDL最短路径算法运行效率

    前两天跑了一个最短路径,在找出需要搜索的点那放了两个循环,因此大约2分钟或者一分半出一张361*361的图,其实搜索的范围就这个图的一半,我当时觉得已经算是在降低运行时间了,但是由于跑的实在太慢,而我毕设的数据量又很大,因此再进行改进。

    是想着把那两个循环去掉,其实那两个循环的目的很简单就是找到distance数组里最小的且没有被搜索过的数,因此用了数组运算,将符合条件的像元都存在一个数组中,不符合条件的令为999,然后在起始的时候定义一个min=999,这样在后来得到最小值时,就可以直接比较了。刚开始不知道有ARRAY_INDICES这个函数可以识别多维数组的位置。所以当时只撤销了一个循环,改用min()函数,时间变为30s出一张图,后来再把另一循环删掉用ARRAY_INDICES,最后运行20s,我觉得在IDL中能用矩阵运算的一定要用啊,用不了用where,或者它自己自带的函数,会快很多。要减少自己写循环的次数。

修改后的一段代码如下:

;找出最小且没有搜索过的点
    minnumber=999.0
    mini=-1
    minj=-1
    right=mask
    right[*,*]=(search eq 0 and s ge index and mask eq 1)*1 ;这里是找出符合条件的像元
    distemp=pdis
    distemp[*,*]=distemp*(right eq 1)+999*(right eq 0)
    minvalue=min(distemp,location)
    if minvalue lt minnumber then begin
      ind = ARRAY_INDICES(distemp, location)
      minnumber=minvalue
      mini=ind[0]
      minj=ind[1]
    endif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就是一只白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值