Python:有没有可能用MATLAB风格来插值一个矩阵?

2024-09-29 07:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难在python中插值矩阵/数据帧。在

假设我们有一个矩阵M = 3x4和{},y = [0.1 0.4 0.5 0.7]

这是我在Matlab中进行插值和绘图的方法。在

xq = 1:1:5;
yq = 0.1:0.1:1;
[xq,yq] = meshgrid(xq,yq);
zq = interp2(y,x,M,xq,yq);
figure
h=pcolor(xq,yq,zq)
set(h,'EdgeColor','none')

这是Python中一种可能的方法

^{pr2}$

Tags: 数据方法绘图矩阵插值figuresetmatlab
1条回答
网友
1楼 · 发布于 2024-09-29 07:28:22

正如我在一篇评论中指出的,您的代码可以使用必要的库1:1翻译成python。你需要numpy代表^{}/^{}matplotlib.pyplot代表^{}scipy.interpolate代表^{}。我本来想说“^{} is available but don't use it,但结果证明你需要在输入数据的凸包之外进行外推法,所以griddata不会切断它。这是一个含有^{}的解决方案,但结果是一粒盐:

import numpy as np
import scipy.interpolate as interp
import matplotlib.pyplot as plt

# input
xv = np.array([1, 3, 5])
yv = np.array([0.1, 0.4, 0.5, 0.7])
x,y = np.meshgrid(xv,yv)
M = np.random.rand(4,3)

xqv = np.arange(1,6)
yqv = np.arange(0.1,1.1,0.1)
xq,yq = np.meshgrid(xqv,yqv)
zqfun = interp.interp2d(x,y,M)
zq = zqfun(xqv,yqv)

plt.figure()
#h = plt.pcolor(xq,yq,zq)
h = plt.pcolormesh(xq,yq,zq)   # <  same thing but faster

结果(左)与您的MATLAB原始版本(右;在interp2d中修正x,y,M顺序后):

resultmatlab original

您可以看到结果的不同,这是因为MATLAB总是丢弃数据的最后一行和最后一列,而matplotlib则没有

相关问题 更多 >