爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4958|回复: 2

[程序设计] 区块分割的插值方法(优点:速度快)

[复制链接]

新浪微博达人勋

发表于 2020-7-16 14:44:59 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 ゼヅ欢チニ 于 2020-7-16 14:46 编辑

说在前面:
       最近几个月,由于工作较忙,未仔细逛过家园,不清楚该方法是否已有大神贡献出了,若无,有需要的可参考本例,若有,权当沟通交流一番。
再说结果:
       优化前myinterp2插值需要3~4分钟,优化后需要32s左右。当然是完全一样的插值要求下哈。
动机描述:                   最近在做一些东西,要设计到数据插值,而matlab自带的interp2插值无法处理目标经纬度点阵不遵循“严格单调递增”的要求,然后就用了griddata插值,结果惨不忍睹。加上,很久之前在网上查找过插值方法,发现和自己去年写的myinterp2速度相当,在本人实际工作中难堪大用(1天需要插值24小时,每小时需要插值15次,一共有好几个月的数据,那么插值1个月时间就需要约558个小时,恩。。。,也就23天左右)。因此,优化了myterp2插值方法,目前该方法为临近点插值,也可改写为双线性,反距离权重插值等(改写较易,就不再献丑了)。
优化手段:1/2优化可提升速度,3优化可提升准确度
      1.该双重循环为单重循环,少了一个for,提升了速度。
      2.分割区域搜索,不在搜索全区域,而是搜索分割的小区域,大量提升了速度。
      3.自适应范围插值,解决小区域搜索不到时的尴尬。
实践结果:
     1.361*205点阵插值到432*339点阵,完成一次需要3~4分钟;
     2.减少一层for循环,完成时间缩短了约10%;
     3.分割区域,对固定尺度的小区域搜索,完成时间缩短到30s左右;
     4.改进自适应尺度搜索(防止搜索无结果,插值后有nan值),时间增多时长不等,本人例子中增多约2s左右。

前提要求:
     1.插值前后的经纬度点阵需要提前弄好,必须得是同维度(这点应该所有插值函数都需要满足的吧)。
     2.由于工作不涉及投影、转换坐标等,因此插值前后的经纬度必须是同性质下的。
     3.若不清楚各参数的意义,m文件中有简要介绍
     4.若同等差值要求情况下,速度比我快,请不要告诉我你电脑很好,若比我慢,也请不要P我说骗子哈。。。。
写在后面:
      本人编程能力一般,加上事忙,没过多优化代码,仅测试过速度和准确度方面的问题,所以就直接贡献出来交流学习学习。(本人还测试过双重循环+全范围搜索的并行版本,但速度没有该版本快,等有时间了再去想想但重循环+自适应区块搜索+并行版本)



myinterp2.m

1.92 KB, 下载次数: 9, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-7-16 15:59:06 | 显示全部楼层
有demo数据就更好了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-17 11:13:57 | 显示全部楼层
暖气团 发表于 2020-7-16 15:59
有demo数据就更好了

额   数据160多m太大了,您随便rand个数据都行的,这个不涉及IO,不用真正的数据。您只要是一二维数据差值都可以试试的哈
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表