Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么scipy.interpolate.griddata和scipy.interpolate.RectBivariateSpline返回不同的值?_Python_Scipy - Fatal编程技术网

Python 为什么scipy.interpolate.griddata和scipy.interpolate.RectBivariateSpline返回不同的值?

Python 为什么scipy.interpolate.griddata和scipy.interpolate.RectBivariateSpline返回不同的值?,python,scipy,Python,Scipy,我想画一个给定点的曲面。我想得到任意点的z坐标。我不明白为什么scipy.interpolate.griddata和scipy.interpolate.RectBivariateSpline为相同的x和y坐标返回不同的值。我哪里出错了 将numpy导入为np 从scipy.interpolate导入网格数据,矩形双变量样条线 从mpl_toolkits.mplot3d导入Axes3D 将matplotlib.pyplot作为plt导入 x_list=np.array([10.0,10.0,0.0

我想画一个给定点的曲面。我想得到任意点的z坐标。我不明白为什么scipy.interpolate.griddata和scipy.interpolate.RectBivariateSpline为相同的x和y坐标返回不同的值。我哪里出错了

将numpy导入为np
从scipy.interpolate导入网格数据,矩形双变量样条线
从mpl_toolkits.mplot3d导入Axes3D
将matplotlib.pyplot作为plt导入
x_list=np.array([10.0,10.0,0.0,0.0])
y_list=np.array([0.0,10.0,10.0,0.0])
z_list=np.array([103.95105.5104.85104.6])
席= NP .LimSales(Min(XYLIST),MAX(XYLIST),11)
yi=np.linspace(最小(y_列表),最大(y_列表),11)
网格x,网格y=np.meshgrid(xi,yi)
grid_z1=griddata((x_列表,y_列表),z_列表,(grid_x,grid_y),方法='nearest')
grid_z2=griddata((x_列表,y_列表),z_列表,(grid_x,grid_y),method='linear')
grid_z3=griddata((x_列表,y_列表),z_列表,(grid_x,grid_y),method='cubic')
z=矩形二元样条线(xi,yi,grid_z2,kx=1,ky=1,s=0)
打印z(10.0,0.0)[0,0]#返回104.85!!!必须是103.95。
图=plt.图()
ax1=图添加_子图(221,投影='3d')
surf=ax1。绘制曲面(栅格x、栅格y、栅格z1)
ax1.set_xlabel(u'X')
ax1.set_ylabel(u'Y')
ax1.set_zlabel(u'Z')
ax2=图添加_子图(222,投影='3d')
surf=ax2.绘制曲面(栅格x、栅格y、栅格z2)
ax2.set_xlabel(u'X')
ax2.set_ylabel(u'Y')
ax2.set_zlabel(u'Z')
ax3=图添加_子地块(223,投影='3d')
surf=ax3.绘制曲面(栅格x、栅格y、栅格z3)
ax3.set_xlabel(u'X')
ax3.set_ylabel(u'Y')
ax3.set_zlabel(u'Z')
plt.show()

我使用参数
索引='ij'
并且我的代码工作正常。


它们不只是不同的插值方法吗?您不能期望值完全相同。我不确定您试图对代码做什么,但您可能会成为
np.meshgrid
的Matlabesque行为的牺牲品。请参阅此讨论。TLDR:更改meshgrid的输入顺序,然后再试一次是的,只需更改:
grid\u y,grid\u x=np.meshgrid(xi,yi)
,我认为这些东西现在应该可以工作了。(如果您确认这是一个问题,请在回答中解释发生了什么,以便回到这个问题的人确切地知道发生了什么)我使用
grid\u x,grid\u y=np.meshgrid(xi,yi,indexing='ij')
,一切正常。谢谢你的链接。
import numpy as np
from scipy.interpolate import griddata, RectBivariateSpline
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

x_list = np.array([  10.0,  10.0,   0.0,    0.0])
y_list = np.array([  0.0,  10.0,   10.0,    0.0])
z_list = np.array([103.95, 105.5, 104.85, 104.6])

xi = np.linspace(min(x_list), max(x_list),11)
yi = np.linspace(min(y_list), max(y_list),11)

grid_x, grid_y = np.meshgrid(xi, yi, indexing = 'ij')

grid_z1 = griddata((x_list, y_list), z_list, (grid_x, grid_y), method='nearest')
grid_z2 = griddata((x_list, y_list), z_list, (grid_x, grid_y), method='linear')
grid_z3 = griddata((x_list, y_list), z_list, (grid_x, grid_y), method='cubic')

z = RectBivariateSpline(xi, yi, grid_z2, kx=1, ky=1, s=0)

print z(10.0, 0.0)[0,0] #return 103.95)))

fig = plt.figure()
ax1 = fig.add_subplot(221, projection='3d')
surf = ax1.plot_surface(grid_x, grid_y, grid_z1)
ax1.set_xlabel(u'X')
ax1.set_ylabel(u'Y')
ax1.set_zlabel(u'Z')

ax2 = fig.add_subplot(222, projection='3d')
surf = ax2.plot_surface(grid_x, grid_y, grid_z2)
ax2.set_xlabel(u'X')
ax2.set_ylabel(u'Y')
ax2.set_zlabel(u'Z')

ax3 = fig.add_subplot(223, projection='3d')
surf = ax3.plot_surface(grid_x, grid_y, grid_z3)
ax3.set_xlabel(u'X')
ax3.set_ylabel(u'Y')
ax3.set_zlabel(u'Z')

plt.show()