長さの異なる N 個の大きなリストがあり、リスト内の各値は長さ 25 の固定ウィンドウでのシグナルを表します。つまり、25 秒/ベース/などごとにシグナルの平均値を取得し、その値をリスト。
これは、さまざまな時間の長さ (すべて 25 btw の倍数) で実行されるさまざまな実験/デバイスに対して行います。
つまり、リスト 1 は 1000 回の実行で、リスト 1 の値は 1000/25=40、リスト 2 は 1025 分の実行、リスト 2 の値は 1025/25 = 41、リスト 3 は 2525 分の実行、2525/25 = 101 です。 list3 の値など...
ここで、比較のために、各リストを同じ数のビン (40 ビンとしましょう) に再スケーリングしたいと思います。
実際のところ、list1resized の長さは 40 になり、1000/40 = 25 であるため、その値は変更されません。list2resized は 41 値の長さから 40 値の長さになり、list3 は 101 値の長さから 40 値の長さになります (つまり、すべてのリストが同じサイズになりました)。
そしてここで質問です。適切なビンの加重平均を取得して、各リストのサイズを 40 の固定長に変更するにはどうすればよいですか?
例は質問を明確にします。
list1 = [4.8, 6.9, ...] #40 values for the 1000 run
list2 = [5.6, 7.8, 8.9, 13.4, ...] #41 values for the 1025 run
list3 = [4.1, 5.6, 10.3, 9.8, 40, 30, 21.4, 3, 2,...] #101 values for the 2525 run
これで、サイズ変更されたリストは次のようになります。
list1resized = [4.8*25/25, 6.9*25/25,...] #40 values for the 1000 run
list2resized = [(5.6*25+7.8*0.625)/25.625, (7.8*24.375+8.9*1.275)/25.625, (23.725*8.9+1.9*13.4)/25.625,...] # 40 values, averaged accordingly, for the 1025 run
list3resized = [(4.1*25+5.6*25+10.3*13.125)/(63.125), (10.3*11.875+9.8*25+40*25+30*1.25)/(63.125),...] # 40 values, averaged accordingly, for the 2525 run
サイズ変更されたリストの各要素のこのような平均値を取得するために、サイズ変更された新しいビンの加重平均を取りました (つまり、list1 では 1000/40=25 の平均、list2 では 1025/40=25.625 の平均、list2 の平均はlist3 では 2525/40=63.125 など)。つまり、同じですが、加重平均に使用した式を使用します。
list1resized = [4.8*25/25, 6.9*25/25,...] #40 values for the 1000 run
list2resized = [(5.6*25+7.8*0.625)/25.625, (7.8*24.375+8.9*(25.65-24.375))/(25.625), (23.725*8.9+(25.625-23.725)*13.4)/(25.625),...] # 40 values, averaged accordingly, for the 1025 run
list3resized = [(4.1*25+5.6*25+10.3*13.125)/(63.125), (10.3*(25-13.125)+9.8*25+40*25+30*(63.125-25*3+13.125)))/(63.125),...] # 40 values, averaged accordingly, for the 2525 run
ご覧のとおり、面倒で扱いにくいものになる可能性がありますが、私は問題に対するpythonicでエレガントで迅速な解決策を探しています。
多くのリストに対してこれを何度も行う必要があるため、実行時間を考慮すると便利です。
アイデアがあるかどうかはわかりませんが、助けていただければ幸いです。
ありがとう。