Mam listę sygnałów (reprezentujących kolejne MESURES):lista Python zachować wartość tylko wtedy równa n poprzedników
signals = [0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0]
uważam sygnał ważna tylko wtedy równa poprzednich n MESURES.
Np. jeśli weźmiemy pod uwagę tylko 2 komunikaty do sprawdzania poprawności (n=2)
, pierwsze sygnały czasowe zmieniają się z 0 na 1, uważamy, że nadal jest 0, ale następna, jeśli jest to 1 ponownie, to uważamy, że nadal jest poprawna i sprawiają, że 1. Wtedy potrzebowalibyśmy 2 mesures z 0, aby zmienić go na 0, itd ... Tutaj sygnały są 0 i 1 dla uproszczenia, ale w mojej aplikacji mogą to być inne liczby całkowite.
Pożądany wyjściowa:
# For n = 2:
valid_s = [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]
# For n = 3:
valid_s = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0]
# For n = 4:
valid_s = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0]
Szukałem o pythonesque sposób jedną wkładką robi to, ale nie wydaje się znaleźć pożądany wynik. Próbowałem coś wzdłuż linii:
S = signals
# For n = 2
[S[i] if S[i] == S[i-1] else S[i-2] for i, _ in enumerate(S)]
# gives [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# For n = 3
[S[i] if S[i] == S[i-1] == S[i-2] else S[i-3] for i, _ in enumerate(S)]
# gives [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]
Edit: Jestem otwarty na numpy
jeśli to sprawia, że łatwiej, gdyż już importowane.
Czy pożądany wynik dla n = 2 jest poprawny? Czy opierasz swoje wyniki tylko na zmierzonych wartościach lub na już "skorygowanych" poprzednich wartościach? – voiDnyx
Tak, dla n = 2 potrzebuję dwóch kolejnych 1 lub 0 do rozważenia przejścia na 1 lub 0. Jeśli nie mam dwóch kolejnych, to zachowuję poprzednio już zatwierdzoną wartość. Stąd pożądane wyjście dla n = 2. – Fredovsky