如何一张图满足下面的函数:
z
(
x
,
y
)
=
sin
(
π
x
2
)
e
y
/
2
z(x, y) = sin (frac{pi x}{2})e^{y/2}
z(x,y)=sin(2πx)ey/2
这里x, y分别是该图片的水平和垂直像素,z表示像素值具体画图如下:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 4, 13) y = np.array([0, 2, 3, 3.5, 3.75, 3.875, 3.9375, 4]) X, Y = np.meshgrid(x, y) Z = np.sin(np.pi*X/2) * np.exp(Y/2) fig, ax = plt.subplots() ax.pcolormesh(X, Y, Z) plt.show()
对该图进行插值,也就是将该图片的像素扩大:
import numpy as np
from scipy.interpolate import interp2d
import matplotlib.pyplot as plt
x = np.linspace(0, 4, 13)
y = np.array([0, 2, 3, 3.5, 3.75, 3.875, 3.9375, 4])
X, Y = np.meshgrid(x, y)
Z = np.sin(np.pi*X/2) * np.exp(Y/2)
x2 = np.linspace(0, 4, 65)
y2 = np.linspace(0, 4, 65)
f = interp2d(x, y, Z, kind='cubic')
Z2 = f(x2, y2)
fig, ax = plt.subplots(nrows=1, ncols=2)
ax[0].pcolormesh(X, Y, Z)
ax[0].title.set_text('uninterpolate')
X2, Y2 = np.meshgrid(x2, y2)
ax[1].pcolormesh(X2, Y2, Z2)
ax[1].title.set_text('interpolated')
plt.suptitle('linear', color='red', fontsize=20)
plt.show()
插值后的结果:
上图采用的是’kind = cubic’的结果,采用’kind=liear’:
采用’kind=quintic’:
这里不同于interp1d,interp2d可以直接使用外插,只不过当提供了fillvalue后,会使用提供的值进行外插,如果不提供,将从边界处外推。注意的是内插要比外插精确。



