eleganter Weg ein numpy Array mit datetime.timedelta in Sekunden in Python 2.7 zu konvertieren

8

Ich habe ein Nummernfeld namens dt . Jedes Element hat den Typ datetime.timedelta . Zum Beispiel:

%Vor%

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:

%Vor%

Ich habe versucht, dt.total_seconds() zu verwenden, aber natürlich hat es nicht funktioniert. Irgendeine Idee, wie man diese Schleife vermeidet?

Danke

    
otmezger 26.09.2013, 21:31
quelle

4 Antworten

9
%Vor%     
prgao 26.09.2013, 21:38
quelle
10

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:

%Vor%

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.

    
Veedrac 26.09.2013 21:41
quelle
0

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:

%Vor%     
crayzeewulf 26.09.2013 21:46
quelle
-2

Sie könnten ein "Listenverständnis" verwenden:

%Vor%

Hinter den Kulissen sollte numpy das in eine ziemlich schnelle Operation übersetzen.

    
Reinout van Rees 26.09.2013 21:40
quelle

Tags und Links