2012-11-06 97 views
2

我有一些xy數據,其中對於x矢量中的每個條目,在y向量中都有相應的條目。此外,x數據不是均勻分佈的。numpy局部線性逼近

我想要x樣品之間進行內插,以獲得在尺寸x偶數間隔和來近似對應的y值。在numpy,interp1d似乎是一個自然的解決方案,但我的問題有一個警告:x值不單調增加(因爲xy都是時間的函數)。 interp1d函數和插值模塊的其他函數,因此在那些x反轉方向的點上給出奇怪的結果。

我真的很想做的就是在兩個相鄰的點的每一組之間簡單地擬合一條直線,然後基於這個非常局部的近似值進行插值。有沒有一個功能可以在numpy中做到這一點,還是我必須自己安裝一些東西?

+0

您應該記得將有用的答案標記爲「已接受」;這有助於其他人看到你的問題,找到最有用的答案,並且也表明你花時間幫助你的人。 –

+0

如果'x'沒有單調增加或減少,則沒有唯一的映射。例如,如果你有'x = array([0,1,0])',如果你通過'xx = 0.5',應該插入哪兩個點? – mgilson

+0

我知道沒有獨特的映射。但是,假設x = array([0,1,0]),如果我將插入的輸入作爲xx = array([0,0.5,1,0.5,0]),那麼我想返回如果解釋有意義,則第一個0.5值是前兩個y之間的中點,而第二個0.5值是後兩個y之間的中間點。 – dataman

回答

0

你能排序你的xy對然後使用interp1d嗎?像這樣?

import sort 
xy = zip(x,y) 
new_xy = sorted(xy, key=lambda xy: xy[0]) 
x = new_xy[:,0] 
y = new_xy[:,1] 

現在,您的x單調增加,關係已被保留。