【问题标题】:Interpolation Scipy Python插值 Scipy Python
【发布时间】:2020-03-27 00:33:23
【问题描述】:

我尝试使用 scipy.interpolate.interp2d 但我遇到了问题。

这是我的代码:

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

z_srtrm = 100 * np.random.rand(4,4)
x_srtrm = np.arange(0,4)
y_srtrm = np.arange(0,4)

I = itp.interp2d(x_srtrm,y_srtrm,z_srtrm,kind='cubic') 
xi = np.linspace(0,4,100) 
yi = np.linspace(0,4,100) 
Z = I(xi,yi) 

zx = np.arange(0,100)
zy = np.arange(0,100)

I_inv = itp.interp2d(zx,zy,Z,kind='cubic') 
xj = np.linspace(0,100,4) 
yj = np.linspace(0,100,4) 
z = I_inv(xj,yj)

fig = plt.figure()
ax1 = fig.add_subplot(1,3,1)
ax1.imshow(z_srtrm)
ax2 = fig.add_subplot(1,3,2)
ax2.imshow(Z)
ax3 = fig.add_subplot(1,3,3)
ax3.imshow(z)

plt.show()

通常,z_srtm 应该等于 z,但事实并非如此。 你能解释一下为什么吗? 提前谢谢你。

【问题讨论】:

    标签: python scipy interpolation


    【解决方案1】:

    原因是由np.arange 的工作方式引起的一个错误:

    >>> np.arange(0, 10)
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    

    您需要进行两项更改。首先,x_srtrmy_srtrm 从 0 变为 3,因此在上采样时需要保持这一点:

    I = itp.interp2d(x_srtrm, y_srtrm, z_srtrm, kind='cubic') 
    xi = np.linspace(0, 3, 100) 
    yi = np.linspace(0, 3, 100)
    Z = I(xi, yi)
    

    其次,zxzy 从 0 到 99,所以下采样时需要考虑:

    I_inv = itp.interp2d(zx, zy, Z, kind='cubic') 
    xj = np.linspace(0, 99, 4)
    yj = np.linspace(0, 99, 4)
    z = I_inv(xj, yj)
    

    【讨论】:

    • 非常感谢,它有效。是的,我完全理解你的解释!
    • 很高兴能帮上忙!
    猜你喜欢
    • 2011-07-04
    • 2021-09-09
    • 2017-12-13
    • 1970-01-01
    • 2016-02-07
    • 2011-07-05
    • 2011-09-08
    • 2011-09-17
    • 2013-03-04
    相关资源
    最近更新 更多