2017-10-20 29 views
0

に私はPythonでライブラリ「scipy.signal」で働いていますし、私は次のコードを持っている:エラーがsignal.filtfiltでPythonの

from scipy import signal 

b = [ 0.001016 0.00507999 0.01015998 0.01015998 0.00507999 0.001016 ] 

a = [ 1.   -3.0820186 4.04351697 -2.76126457 0.97291013 -0.14063199] 
data = [[ 1.] 
[ 1.] 
[ 1.] 
...] 
# length = 264 
y = signal.filtfilt(b, a, data) 

をしかし、私はコードを実行するとき、私は次のエラーメッセージが表示されます:

The length of the input vector x must be at least padlen, which is 18. 

私は何ができますか?

答えて

1

dataは、形状(264、1)の2次元配列であるようです。デフォルトではfiltfiltは入力配列の最後の軸に沿ってフィルタリングします。したがって、データの長さが1の軸に沿ってフィルタリングしようとしています。この長さはデフォルトのパディング方法には十分ではありません。

dataを1次元配列として解釈することを前提としています。もし出力yも形状(264 1)を有し、その場合に(すなわち、列ダウン)第一の次元に沿ってフィルタリングするaxis=0

y = signal.filtfilt(b, a, data, axis=0) 

引数を追加することができます。または、np.ravel(data)でフラット化するか、またはインデックスを使用して最初の(そして唯一の)列data[:, 0]を選択して、入力を1次元配列に変換することができます。 (後者は、dataが実際にはリストのリストではなく、数字の配列である場合にのみ機能します)。その場合

y = signal.filtfilt(b, a, np.ravel(data)) 

、出力yはまた(264)の形状で、一次元アレイであろう。

関連する問題