2017-06-21 106 views
1

我正在將matlab腳本轉換爲python,我有它的障礙。 爲了對信號使用三次樣條插值。該腳本使用三個輸入的命令樣條曲線。 f_o,c_signal和freq。所以它看起來像下面這樣。Matlab的樣條曲線在Python中等價於三個輸入。

cav_sig_freq = spline(f_o, c_signal, freq) 
f_o = 1x264, c_signal = 1x264 and freq = 1x264 

從在MATLAB它讀取「S =花鍵(X,Y,XQ)返回的內插值及其對應於該查詢的點的矢量在XQ的文檔。S的值是通過三次樣條來確定插入x和y「。

在蟒蛇我很努力地找到正確的python等價物。我在numpy和Scipy文檔中發現的不同的插值函數讓我們使用Matlab中的第三個輸入。

感謝您花時間閱讀本文。如果有什麼建議可以讓我更清楚,我會很樂意這樣做。

回答

0

您是否嘗試過scipy.interpolate內的InterpolatedUnivariateSpline?如果我正確理解MatLab部件,那麼我認爲這將起作用。

import numpy as np 
from scipy.interpolate import InterpolatedUnivariateSpline as ius 

a = [1,2,3,4,5,6] 
b = [r * 2 for r in a] 
c = ius(a, b, k=1) 

# what values do you want to query? 
targets = [3.4, 2.789] 

interpolated_values = c(targets) 

看來,這可能會增加一個步驟,以你的代碼比MATLAB提供,但我認爲這是你想要的。

+0

感謝您的回覆,我已經嘗試過。然而,由於某種原因,它只會導致在第二步提交「nan」的數組。 – Runsiv

2

基本上你首先需要生成一個類似插值函數的東西,然後給它你的觀點。使用您的變量名是這樣的:

from scipy import interpolate 
tck = interpolate.splrep(f_o, c_signal, s=0) 

,然後這個TCK適用於你的觀點:

c_interp = interpolate.splev(freq, tck, der=0) 

如需更多關於這個你可以閱讀這個post

+0

謝謝我認爲它需要像matlab中的單一操作,所以沒有閱讀文檔以及我應該有。 但是,interpolation.splev給出了以下錯誤: line 515,in splrep raise _iermess [ier] [1](_ iermess [ier] [0]) ValueError:輸入數據錯誤 – Runsiv