Ich habe ein Nummernfeld namens dt
. Jedes Element hat den Typ datetime.timedelta
. Zum Beispiel:
Wie kann ich dt
in das Array dt_sec
konvertieren, das nur Sekunden ohne Schleifen enthält? Meine derzeitige Lösung (die funktioniert, aber ich mag sie nicht) ist:
Ich habe versucht, dt.total_seconds()
zu verwenden, aber natürlich hat es nicht funktioniert. Irgendeine Idee, wie man diese Schleife vermeidet?
Danke
numpy
hat seine eigenen datetime
und timedelta
Formate. Benutze sie einfach;).
Einrichtung zum Beispiel:
%Vor%Code:
%Vor% Da die Leute nicht zu erkennen scheinen, dass dies die beste Lösung ist, hier ein paar Zeitangaben für ein timedelta64
Array und ein datetime.datetime
Array:
Ergebnisse:
%Vor% Die anfängliche Übersetzung dauert ungefähr zweimal so lange wie der vektorisierte Ausdruck, aber jede Operation von da an bis zur Ewigkeit in diesem timedelta
-Array wird ungefähr 20 mal schneller sein.
Wenn Sie diese timedelta
s nie wieder verwenden werden, überlegen Sie sich, warum Sie überhaupt die Deltas erstellt haben (im Gegensatz zu timedelta64
s) und verwenden Sie dann den Ausdruck numpy.vectorize
. Es ist weniger nativ, aber aus irgendeinem Grund ist es schneller.
Ich mag die Verwendung von np.vectorize
, wie von prgao vorgeschlagen. Wenn Sie nur eine Python-Liste möchten, können Sie auch Folgendes tun:
Sie könnten ein "Listenverständnis" verwenden:
%Vor%Hinter den Kulissen sollte numpy das in eine ziemlich schnelle Operation übersetzen.