2013-05-01 105 views
3

我有三列非結構化數據,並且想要對它們進行二元樣條擬合。我對Python中的類還不太熟悉,所以我不明白如何做到這一點。爲了表示我的問題,我做了一個簡單的代碼:在網格上評估SmoothBivariateSpline

#! /usr/bin/env python3 

import numpy as np 
from scipy import interpolate 

#an array of 3 columns: 
a=np.zeros((200, 3)) 
a[:,0]=np.random.uniform(0,1,200) 
a[:,1]=np.random.uniform(3,5,200) 
a[:,2]=np.random.uniform(10,12,200) 

#find the boundries 
min_x, max_x = np.amin(a[:,0]), np.amax(a[:,0]) 
min_y, max_y = np.amin(a[:,1]), np.amax(a[:,1]) 

#Set the resolution: 
x_res=1000 
y_res=int(((max_y-min_y)/(max_x-min_x))*x_res) 

#Make a grid 
grid_x, grid_y = np.mgrid[min_x:max_x:x_res*1j, min_y:max_y:y_res*1j] 

sbsp=interpolate.SmoothBivariateSpline(a[:,0], a[:,1], a[:,2]) 

b=sbsp.ev(4,5) 
#c=sbsp.ev(grid_x, grid_y) 
print(b) 

這給出了一個點的插值,但是如果你註釋掉最後第二條,這是行不通的。如果有人能指導我如何在網格上獲取樣條插值,我將非常感激。提前致謝。

回答

1

方法ev(x,y)要求xy是一維數組。 在您的代碼中,grid_xgrid_y是2D。

你可以嘗試以下方法:

c=sbsp.ev(grid_x[0,0], grid_y[0,0])