- 积分
- 8366
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-2-23
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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我说骗子哈。。。。
写在后面:
本人编程能力一般,加上事忙,没过多优化代码,仅测试过速度和准确度方面的问题,所以就直接贡献出来交流学习学习。(本人还测试过双重循环+全范围搜索的并行版本,但速度没有该版本快,等有时间了再去想想但重循环+自适应区块搜索+并行版本)
|
|