插值 Scipy Python
Interpolation Scipy Python
我尝试使用 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,但事实并非如此。
你能解释一下为什么吗?
提前谢谢你。
原因是 np.arange
的工作方式造成的差一错误:
>>> np.arange(0, 10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
您需要进行两项更改。首先,x_srtrm
和 y_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)
其次,zx
和zy
从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)
我尝试使用 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,但事实并非如此。 你能解释一下为什么吗? 提前谢谢你。
原因是 np.arange
的工作方式造成的差一错误:
>>> np.arange(0, 10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
您需要进行两项更改。首先,x_srtrm
和 y_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)
其次,zx
和zy
从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)