【发布时间】:2016-03-04 22:03:48
【问题描述】:
我很难在 python 中插入矩阵/数据框。
假设我们有一个矩阵M = 3x4 和x = [1 3 5],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 中是一种可能的方式
from scipy import interpolate
import numpy as np
def my_interp(X, Y, Z, x, y, spn=3):
xs,ys = map(np.array,(x,y))
z = np.zeros(xs.shape)
for i,(x,y) in enumerate(zip(xs,ys)):
# get the indices of the nearest x,y
xi = np.argmin(np.abs(X[0,:]-x))
yi = np.argmin(np.abs(Y[:,0]-y))
xlo = max(xi-spn, 0)
ylo = max(yi-spn, 0)
xhi = min(xi+spn, X[0,:].size)
yhi = min(yi+spn, Y[:,0].size)
# make slices of X,Y,Z that are only a few items wide
nX = X[xlo:xhi, ylo:yhi]
nY = Y[xlo:xhi, ylo:yhi]
nZ = Z[xlo:xhi, ylo:yhi]
intp = interpolate.interp2d(nX, nY, nZ)
z[i] = intp(x,y)[0]
return z
zq = my_interp(y, x, M, xq, yq)
【问题讨论】:
-
一些明目张胆的自我推销:interpolation (look for griddata) 和 pcolor(mesh)。必要的功能有据可查。
-
您可以为那些不熟悉 MATLAB 功能的 Python 人员描述过程和结果。
-
谢谢大家...:) 我会分享我的 Python 代码!
-
@Prune 实际上,添加
np.sp.interpolate.或plt.将使这与 numpy 几乎是 1:1。如np.meshgrid、sp.interpolate.griddata、plt.pcolor。即使sp.interpolate.interp2d也可以,但最好避免它。否则,我完全支持你的想法,需要更多信息才能更清楚地了解。 -
@Andras -- 我非常同意;这就是为什么我没有投票或投票结束。 我很清楚,但原始帖子排除了一些潜在的贡献。
标签: python image matlab matrix interpolation