Gibt es eine Möglichkeit, die Vektorisierungsfunktionen von numpy zu verwenden, wenn Sie eine boolesche Operation für ein Array von datetime-Objekten ausführen, in denen Sie Attribute von datetime-Objekten vergleichen möchten.Wie vektorisiere ich eine boolesche Operation für eine Reihe von nackten Datumsangaben, wobei die boolesche Operation datetime-Objektattribute vergleicht?
Mein naiver erster Versuch war:
import datetime as dtm
import numpy as np
dt = np.array([dtm.datetime(2014,1,4,12,2,1), dtm.datetime(2014,1,4,12,2,1), dtm.datetime(2014,1,6,12,2,1), dtm.datetime(2014,1,5,12,2,1), dtm.datetime(2014,1,4,12,2,1), dtm.datetime(2013,1,4,13,3,1), dtm.datetime(2013,1,5,22,2,1)])
bool = (dt.year == 2014)
Das hat mir den Fehler gab:
AttributeError: 'numpy.ndarray' object has no attribute 'year'
, die im Nachhinein offensichtlich war.
Ich glaube nicht, dass mein zweiter naiver Versuch war vektorisierbare, dachte aber, es die Arbeit erledigt bekommen würde:
bool = np.array([dts.year == 2014 for dts in dt])
Allerdings bekomme ich den Fehler:
SyntaxError: invalid syntax
I don‘ Ich verstehe nicht, was ich in dieser Aussage falsch mache.
Ich würde eine vektorisierbare Lösung bevorzugen, und ich kann dies mit einer for-Schleife tun, aber ich denke, ich sollte zumindest in der Lage sein, dies in einer Zeile zu tun, ähnlich wie bei meinem zweiten Versuch.
Ist es möglich, diese Aussage zu vektorisieren? Wenn nicht, was mache ich bei meinem zweiten Versuch falsch? Vielen Dank.
Die ungültige Syntax wahrscheinlich ist, weil Sie Klammern benötigen, so dass Sie ein boolean haben Objekt, von dem die Liste machen – Ilja
Es muss etwas anderes falsch sein, ich habe gerade versucht es, und ich bin mit dem gleichen Fehler. – Shawn
@Ilja OK, als ich Ihren Kommentar getestet habe, als ich ihn das erste Mal mit dt14 = [(dts == 2014) für dts in dt] getestet habe, wo ich versucht habe zu erreichen. Ich vernachlässige die zweiten [], also funktioniert dt14 = [[(dts == 2014) für dts in dt]]. Vielen Dank! – Shawn