matlab二维插值 非栅格,二维非结构网格上的插值

你的问题是由一个非常危险的小错误引起的,我认为它值得给出一个完整的答案。在

考虑这一行:points = np.reshape(np.array([x, y]),(z.size, 2))

由于您的输入数组是1d,所以您试图将[x,y]转换为形状(something,2)”。请注意,可以这样说

^{pr2}$

让numpy为你推断缺失的维度,而这仍然不是你想要的。构建二维阵列时np.array([x, y])

您正在逐行定义一个矩阵,从而创建一个shape“(2,something)”数组。当你调用它时,它将逐行读取元素,因为NUMPY以行的主要顺序存储数组(类似C/C++,不像FORTRAN和Matlab)。这意味着生成的两列数组将首先包含所有x值,然后包含所有y值,而不是在每一行中包含(x,y)对。在

实际上,您要做的是在不接触数组结构的情况下,交换数组的维数。这意味着你必须转换矩阵。这意味着你必须使用points = np.array([x, y]).T

# or np.transpose([x,y])

相反。请注意,虽然它与原始文件具有相同的shape,但它的元素顺序是正确的:In [320]: np.reshape(np.array([x,y]),(-1,2))

Out[320]:

array([[ 20.7 , 20.702 ],

[ 20.704 , 20.706 ],

[ 20.708 , 20.71 ],

...,

[ 852.356964, 852.356964],

[ 852.356964, 852.356964],

[ 852.356964, 852.356964]])

In [321]: np.array([x,y]).T

Out[321]:

array([[ 20.7 , 852.357235],

[ 20.702 , 852.357235],

[ 20.704 , 852.357235],

...,

[ 21.296 , 852.356964],

[ 21.298 , 852.356964],

[ 21.3 , 852.356964]])

这将修复示例x/y点和z之间的不一致,并将产生预期的结果。根据我的经验,reshape-ing几乎从未被要求过。通常需要将ndarray展平为1d一个,但是给定数组的ravel()方法是最好的。在

结果作为证明:左边,你原来用三次插值;右边,修正了points的版本:

JS3fPm.png7kdmLm.png

注意,作为@MaxNoe suggested,我将插值网格大小减小到200x200。正如他们所暗示的那样,Rbf的内存错误很可能源于大量的插值点。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值