如何让Matlab的ndgrid与interp2函数兼容使用?
如何让ndgrid生成的网格适配interp2插值函数
ndgrid和meshgrid的核心差异在于维度对应的行列顺序:
- ndgrid生成的
X是行重复(每行对应同一个x值),Y是列重复(每列对应同一个y值) - interp2要求输入的网格是meshgrid格式:
X列重复、Y行重复
要在不修改其他适配ndgrid代码的前提下配合interp2,不用盲目试转置,按以下两种规范方法操作即可:
方法1:转置适配(最直观的2D场景用法)
将ndgrid生成的原始网格矩阵X、Y,以及待插值数据F统一转置,传入interp2完成插值后,再将结果转置回ndgrid对应的行列顺序:
[X, Y] = ndgrid(0:0.1:1, 0:0.1:2); F = cos(X).*sin(Y); [X2, Y2] = ndgrid(0:0.05:1, 0:0.05:2); % 转置后适配interp2,插值完成后转置还原 F2 = interp2(X', Y', F', X2', Y2')';
方法2:维度重排(适合扩展到更高维场景)
利用permute函数交换维度顺序(2D下等价于转置),这种方式在3D及以上场景(配合interp3等)更通用:
[X, Y] = ndgrid(0:0.1:1, 0:0.1:2); F = cos(X).*sin(Y); [X2, Y2] = ndgrid(0:0.05:1, 0:0.05:2); % 交换维度适配interp2,插值后再交换回来 F2 = permute(interp2(permute(X,[2 1]), permute(Y,[2 1]), permute(F,[2 1]), permute(X2,[2 1]), permute(Y2,[2 1])), [2 1]);
原理说明
转置/维度重排本质是将ndgrid的「行对应x、列对应y」的结构,转换成meshgrid要求的「列对应x、行对应y」结构,让interp2能正确识别插值维度;插值完成后再还原结构,保证结果和你其他适配ndgrid的代码逻辑一致。
内容的提问来源于stack exchange,提问作者Gappy Hilmore
相关产品推荐
相关产品推荐

