我有一個 4x4 矩陣 ( test4x4),我想將它插值到一個 8x8 矩陣 ( test8x8)。我用于interpolate.interp2d插值,但是當我繪制它(test8x8)時,它看起來不像是test4x4繪圖。我哪里弄錯了?import numpy as npfrom scipy import interpolateimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dmymin,mymax = 0,3X = np.linspace(mymin,mymax,4)Y = np.linspace(mymin,mymax,4)x,y = np.meshgrid(X,Y)test4x4 = np.array([[ 1.2514318 , 1.25145821, 1.25148472, 1.25151133], [ 1.25087456, 1.25090105, 1.25092764, 1.25095435], [ 1.25031581, 1.25034238, 1.25036907, 1.25039586], [ 1.24975557, 1.24978222, 1.24980898, 1.24983587]])f = interpolate.interp2d(x,y,test4x4,kind='cubic')# use linspace so your new range also goes from 0 to 3, with 8 intervalsXnew = np.linspace(mymin,mymax,8)Ynew = np.linspace(mymin,mymax,8)test8x8 = f(Xnew,Ynew)print('test8x8=',test8x8)plot1=plt.figure(1)plt.title('test 4X4')fig1 = plt.figure(1)ax1 = fig1.gca(projection='3d')ax1.plot_surface(x.T,y.T, test4x4, alpha = 1, rstride=1, cstride=1, linewidth=0.5, antialiased=True, zorder = 0.5)plt.xlabel('x')plt.ylabel('y')plt.grid()ax1.plot_surface(Xnew.T, Ynew.T, test8x8, alpha = 1, rstride=1, cstride=1, linewidth=0.5, antialiased=True, zorder = 0.5)plt.grid()plt.show()我想我可以解決這個問題,我應該使用x1,y1 = np.meshgrid(Xnew,Ynew).
1 回答

慕斯王
TA貢獻1864條經驗 獲得超2個贊
對于 8x8,您還需要一個網格:
...
Xnew = np.linspace(mymin,mymax,8)
Ynew = np.linspace(mymin,mymax,8)
xx, yy = np.meshgrid(Xnew, Ynew) #You need this
并使用這個 meshgrid 來繪制
ax1.plot_surface(xx.T, yy.T, test8x8, alpha=0.5, rstride=1, cstride=1, \
linewidth=0.5, antialiased=True, zorder = 10)
alpha=0.5在兩者中使用plot_surface(),以便您可以看到兩個表面。
要更清楚地分離 2 個表面,您可以嘗試第二個.plot_surface()作為
ax1.plot_surface(xx.T, yy.T, 0.0001+test8x8, alpha=0.5, rstride=1, cstride=1, \
linewidth=0.5, antialiased=True, zorder = 10)
值 0.0001 使第二個表面更高(在 z 方向)。
添加回答
舉報
0/150
提交
取消