I (ardışık mesures temsil eden) sinyallerinin bir listesi var değer tutmak: Python listesi yalnızca eşit eğer n öncülleri
signals = [0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0]
Ben sadece önceki n tedbirler gereği eşit eğer bir sinyal geçerli düşünün.
Ör. (n=2)
numaralı validasyon için sadece 2 meseleyi düşünürsek, ilk zaman sinyalleri 0'dan 1'e döner, biz hala 0'tır, ancak sonraki mesaiyi, eğer tekrar 1 ise, o zaman hala geçerli olduğunu düşünür ve yaparız 1. Sonra 2'ye ihtiyacımız olacak 0 için tekrar 0'a çevirme, vb ... Burada basitleştirme için sinyaller 0 ve 1'dir, fakat benim uygulamada diğer tamsayılar olabilirler.
İstenilen çıktı: Bunu yapmanın bir Pythonesque tek satırlık yol arıyordu ama istenen çıktıyı bulmak için görünmüyor olabilir
# 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]
.
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: Ben çizgisinde bir şey denedim zaten aktardıktan olarak bu kolaylaştırıyor eğer numpy
açığım.
n = 2 doğru için istediğiniz çıktı mı: benim yeni yaklaşım tamamladıktan sonra şimdi bunun @tobias_k zaten onun cevabını uygulanan aynı fikir olduğunu düşünüyorum? Çıktınızı sadece ölçülen değerlere mi yoksa zaten "düzeltilmiş" önceki değerlere mi dayalıyorsunuz? – voiDnyx
Evet, n = 2 için 1 veya 0'a geçiş yapmayı düşünmek için iki ardışık 1 veya 0'a ihtiyacım var. İki ardışıkım yoksa, önceden onaylanmış olan değeri korurum. Bu nedenle n = 2 için istenen çıktı. – Fredovsky