You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中用Scipy结合meshgrid实现MATLAB同款插值?

解决Scipy interpn与MATLAB interpn的适配问题

问题根源

Scipy的scipy.interpolate.interpn和MATLAB的interpn参数逻辑存在差异:

  • MATLAB可直接传入网格矩阵(如XX, YY)作为坐标输入;
  • Scipy要求第一个参数是原始坐标向量的列表(如[x, y]),而非meshgrid生成的网格矩阵;同时要插值的点需整理成(N, 维度数)的二维数组格式。

修正后的Python代码

import numpy as np
from scipy.interpolate import interpn

# 生成原始数据,与MATLAB逻辑一致
x = np.linspace(-10, 10, 10)
y = np.linspace(-5, 5, 10)
DATA = np.random.rand(10, 10)

# 生成网格(indexing='ij'等价于MATLAB的ndgrid)
XX, YY = np.meshgrid(x, y, indexing='ij')
XX2 = XX
YY2 = YY

# 1. 构造Scipy interpn要求的坐标向量列表
points = [x, y]
# 2. 将查询点整理为(N, 2)的二维数组:展平网格后按列堆叠
query_points = np.column_stack((XX2.ravel(), YY2.ravel()))
# 3. 执行插值,将一维结果还原为原网格形状
DATA2 = interpn(points, DATA, query_points).reshape(XX2.shape)

# 验证:原网格点插值结果与原始DATA在浮点精度内一致
print(np.allclose(DATA, DATA2))  # 输出True

关键修改说明

  • 把传入interpn的XX, YY替换为原始坐标向量列表[x, y];
  • 将网格格式的查询点XX2, YY2展平后组合成二维数组,匹配Scipy的参数要求;
  • 插值结果默认是一维数组,用reshape还原为10x10的网格形状,和MATLAB输出格式对齐。

内容的提问来源于stack exchange,提问作者Mo0nKizz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:26:00