シグナルを表すPython配列のサイズを「圧縮」する必要があります。信号は次の例のようになります。
signal = [
[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1], #time values
[1,1,1,2,3,4,4,4,4,2,1,1] #function values
]
圧縮後、信号は次のコードのようになります。
signal_compressed = [
[0.0,0.2,0.3,0.4,0.5,0.8,0.9,1.0,1.1], #time values
[1,1,2,3,4,4,2,1,1] #function values
]
ご覧のとおり、定数値の領域がある場合、この領域の最初と最後の値のみが保存されます。
これを行うために、次のアルゴリズムを作成しました。
signal_compressed = [[],[]]
old_value = None
for index, value in enumerate(signal[1]):
if value != old_value:
if index > 0:
if signal_compressed[0][-1] != signal[0][index - 1]:
signal_compressed[0].append(signal[0][index - 1])
signal_compressed[1].append(signal[1][index - 1])
signal_compressed[0].append(signal[0][index])
signal_compressed[1].append(value)
old_value = value
if signal_compressed[0][-1] < signal[0][-1]:
signal_compressed[0].append(signal[0][-1])
signal_compressed[1].append(signal[1][-1])
このアルゴリズムは正常に機能します。そして、一定のセグメントがたくさんある信号の場合、彼は非常に高速に動作します。しかし、定数セグメントのない信号(正弦波信号やノイズ信号など)を圧縮しようとすると、アルゴリズムの動作が非常に遅くなります。
アルゴリズムを高速化し、機能を節約するにはどうすればよいですか?