當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy signal.savgol_filter用法及代碼示例


本文簡要介紹 python 語言中 scipy.signal.savgol_filter 的用法。

用法:

scipy.signal.savgol_filter(x, window_length, polyorder, deriv=0, delta=1.0, axis=-1, mode='interp', cval=0.0)#

將 Savitzky-Golay 過濾器應用於數組。

這是一個一維濾波器。如果 x 的維度大於 1,則 axis 確定應用過濾器的軸。

參數

x array_like

要過濾的數據。如果x不是單精度或雙精度浮點數組,它將被轉換為類型numpy.float64過濾前。

window_length int

濾波器窗口的長度(即係數的數量)。如果mode為‘interp’,window_length必須小於或等於x的大小。

polyorder int

用於擬合樣本的多項式的階數。多階必須小於window_length。

deriv 整數,可選

要計算的導數的階數。這必須是一個非負整數。默認為0,表示不區分過濾數據。

delta 浮點數,可選

將應用過濾器的樣本的間距。這僅在 deriv > 0 時使用。默認值為 1.0。

axis 整數,可選

沿其應用過濾器的數組 x 的軸。默認值為 -1。

mode str,可選

必須是‘mirror’, ‘constant’, ‘nearest’, ‘wrap’或‘interp’。這決定了應用濾波器的填充信號的擴展類型。當模式為‘constant’時,填充值由cval給定。有關 ‘mirror’, ‘constant’, ‘wrap’ 和 ‘nearest’ 的更多詳細信息,請參閱注釋。當選擇‘interp’模式(默認)時,不使用擴展名。相反,度多階多項式適合邊的最後 window_length 值,並且該多項式用於評估最後 window_length //2 個輸出值。

cval 標量,可選

如果模式為‘constant’,則要填充超過輸入邊的值。默認值為 0.0。

返回

y ndarray,形狀與x

過濾後的數據。

注意

模式選項的詳細信息:

‘mirror’:

Repeats the values at the edges in reverse order. The value closest to the edge is not included.

‘nearest’:

The extension contains the nearest input value.

‘constant’:

The extension contains the value given by the cval argument.

‘wrap’:

The extension contains the values from the other end of the array.

例如,如果輸入為 [1, 2, 3, 4, 5, 6, 7, 8],window_length 為 7,則以下顯示了各種模式選項的擴展數據(假設 cval 為 0):

mode       |   Ext   |         Input          |   Ext
-----------+---------+------------------------+---------
'mirror'   | 4  3  2 | 1  2  3  4  5  6  7  8 | 7  6  5
'nearest'  | 1  1  1 | 1  2  3  4  5  6  7  8 | 8  8  8
'constant' | 0  0  0 | 1  2  3  4  5  6  7  8 | 0  0  0
'wrap'     | 6  7  8 | 1  2  3  4  5  6  7  8 | 1  2  3

例子

>>> import numpy as np
>>> from scipy.signal import savgol_filter
>>> np.set_printoptions(precision=2)  # For compact display.
>>> x = np.array([2, 2, 5, 2, 1, 0, 1, 4, 9])

使用窗口長度為 5 和 2 次多項式的過濾器。對所有其他參數使用默認值。

>>> savgol_filter(x, 5, 2)
array([1.66, 3.17, 3.54, 2.86, 0.66, 0.17, 1.  , 4.  , 9.  ])

請注意,x 中的最後五個值是拋物線的樣本,因此當 mode='interp'(默認值)與 polyorder=2 一起使用時,最後三個值保持不變。比較一下,例如,模式='最近'

>>> savgol_filter(x, 5, 2, mode='nearest')
array([1.74, 3.03, 3.54, 2.86, 0.66, 0.17, 1.  , 4.6 , 7.97])

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.signal.savgol_filter。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。