我想使用numpy / scipy在python中推断3d plot。通过曲线拟合进行外推。请参阅以下数据,这些数据具有不同的x& y尺寸。
onTodoClick
Scipy有scipy.interpolate.interp2d类,但只有x& y大小相同。 http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.interpolate.interp2d.html
我想在y轴点900&处推断曲线。 1200&在x轴点720。
即。
x = np.array([740,760,780,800,820,840,860,880,900,920,940,960]) # Presssure in mBar
y = np.array([1500,1800,2100,2400,2700,3000,3300,3600,3900]) # Rpm
# Fuel Amount in micro seconds
z = np.array([[1820,1820,1820,1820,2350,2820,3200,3440,3520,3600,3600,3600],
[1930,1930,1930,2170,2700,2880,3240,3580,3990,3990,3990,3990],
[1900,1900,2370,2680,2730,3050,3450,3760,3970,3970,3970,3970],
[2090,2090,2240,2410,2875,3180,3410,3935,4270,4270,4270,4270],
[1600,2180,2400,2700,2950,3290,3780,4180,4470,4470,4470,4470],
[2100,2280,2600,2880,3320,3640,4150,4550,4550,4550,4550,4550],
[2300,2460,2810,3170,3400,3900,4280,4760,4760,4760,4760,4760],
[2170,2740,3030,3250,3600,4100,4370,4370,4370,4370,4370,4370],
[2240,2580,2870,3275,3640,4050,4260,4260,4260,4260,4260,4260]])
因为我没有z = f(x,y)的函数。如何在python中对上述情况进行曲线拟合,并在所需的点获得曲线值。
答案 0 :(得分:2)
您需要提供构建z
值的网格,例如
x=[[740,760,...,960],
.....
[740,760,...,960]]
,同样适用于y
。这可以使用numpy.meshgrid
:
xx,yy=np.meshgrid(x,y)
test_function=interp2d(xx,yy,z)
使用您的数据,我可以执行test_function(720,900)
并获得值1820,这是最近邻外推法。如果你需要"更好"外推(无论这意味着什么),你需要为你的数据开发某种模型函数,并使用scipy
中的拟合方法。