Hallo,
irgendwie fehlt mir ein Ansatz wie ich mein Problem lösen kann.
"Mein" googlen, brachte mir leider auch nicht den erhofften Gedankenblitz.
Vielleicht hat hier ja jemand einen Ansatz für mich.
Ich habe einen Wert, wenn dieser von 8 auf 6 wechselt wird die Anzahl einen hochgesetzt. Dies ist z.B. ein Pick von einem Band.
Nun möchte ich live anzeigen bei einem bestehenden Tempo, wie viele "Picks" pro Minute erfolgen würden / erfolgen.
Kann mir jemand auf die Sprünge helfen? Ich stocke bei zaehler +1 , bzw. wie ich es weiter angehe?
Anzahl pro Minute / Hochrechnung
Bei dieser Frage fehlt sehr viel Kontext. Woher kommt der Wert, wo läuft das ganze?
Das wäre meine Lösung:
Das wäre meine Lösung:
Code: Alles auswählen
if vorheriger_wert == 8 and aktueller_wert == 6:
anzahl += 1
Hi, Danke für deine Antwort, genau da stehe ich.
Ich denke ich habe es nicht gut erklärt.
Meine Anzahl wir bei jeder Änderung einmal hochgesetzt. So weit bin ich.
Aber wie kann ich es lösen das mir angezeigt wird, wie oft es pro Minute sein wird?
Also
Änderung 1 = 11:00:09
Änderung 2 = 11:00:12
Änderung 3 = 11:00:45
Das wäre 3 Picks pro Minute....
Ich denke ich habe es nicht gut erklärt.
Meine Anzahl wir bei jeder Änderung einmal hochgesetzt. So weit bin ich.
Aber wie kann ich es lösen das mir angezeigt wird, wie oft es pro Minute sein wird?
Also
Änderung 1 = 11:00:09
Änderung 2 = 11:00:12
Änderung 3 = 11:00:45
Das wäre 3 Picks pro Minute....
Du merkst dir einfach die Zeitstempel in einer Liste. Mit zb dem bisect Modul ermittelst du den Index, der die Zeitstempel in die kleiner und die größer als eine Minute Teilt. Die Anzahl der ersteren ist deine PPM. Den Rest schmeißt du weg.
- DeaD_EyE
- User
- Beiträge: 1012
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Ich würde die Zeitstempel erfassen (mit Datum) und dann die Differenzen bilden. Aus den Zeitdifferenzen den Mittelwert bilden (in Sekunden). Dann 60 / Ergebnis.
Das sollten dann die picks pro Minute sein. Mit der queue aus collections kann man eine maximale Länge festlegen. Wenn die deque voll ist, werden die ältesten Einträge entfernt.
Das sollten dann die picks pro Minute sein. Mit der queue aus collections kann man eine maximale Länge festlegen. Wenn die deque voll ist, werden die ältesten Einträge entfernt.
Code: Alles auswählen
import statistics
import time
from collections import deque
from datetime import datetime as DatetTime
from datetime import timedelta as TimeDelta
from itertools import pairwise
from random import uniform
class Picks:
def __init__(self, queuesize=10):
self.queuesize = queuesize
self.queue = deque(maxlen=queuesize)
def pick(self):
now = DatetTime.now()
print("Pick", now)
self.queue.append(now)
def forget(self, max_age_seconds):
newer_than = DatetTime.now() - TimeDelta(seconds=max_age_seconds)
self.queue = deque([dt for dt in self.queue if dt > newer_than], self.queuesize)
@property
def picks_per_minute(self):
delta_times = [b - a for a, b in pairwise(self.queue)]
try:
median = statistics.median(delta_times)
except statistics.StatisticsError:
return 0.0
return 60 / (median / TimeDelta(seconds=1))
p = Picks()
# 10 simulierte picks
for _ in range(10):
p.pick()
time.sleep(uniform(0.5, 5))
print(p.picks_per_minute)
# Einträge entfernen, die älter als 10 Sekunden sind
# p.forget(10)
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Hallo DeaD_EyE,
vielen Dank für dein ausführliches Beispiel. Ich habe es ausprobiert, es macht genau das was ich wollte. Ich hatte zwischenzeitlich einen etwas umständlicheren Weg begonnen, mir die Timestamps in eine SQLite zu schreiben. Dann mit einem SQL zu berechnen. Aber dein Beispiel ist wesentlich besser, und die Lernkurve dadurch wesentlich steiler.
Vielen Dank dafür.....
vielen Dank für dein ausführliches Beispiel. Ich habe es ausprobiert, es macht genau das was ich wollte. Ich hatte zwischenzeitlich einen etwas umständlicheren Weg begonnen, mir die Timestamps in eine SQLite zu schreiben. Dann mit einem SQL zu berechnen. Aber dein Beispiel ist wesentlich besser, und die Lernkurve dadurch wesentlich steiler.
Vielen Dank dafür.....