2016-07-15 74 views
2

我有日期的陣列爲:的Python:添加小時矢量迄今爲止矢量的elementwise

>>> dates 
array([datetime.datetime(2013, 1, 1, 0, 0), 
     datetime.datetime(2013, 1, 2, 0, 0), 
     datetime.datetime(2013, 2, 1, 0, 0))], dtype=object) 

我具有相同尺寸的小時相應的數組爲日期:

numpy.asarray([3,5,2]) 

我要生成以下內容:

>>> datesPlusHour 
array([datetime.datetime(2013, 1, 1, 3, 0), 
     datetime.datetime(2013, 1, 2, 5, 0), 
     datetime.datetime(2013, 2, 1, 2, 0))], dtype=object) 

即加時矢量日期矢量元素明智。我希望使用比for循環更好的東西。

回答

1

所有你需要的是從你的時間創造timedelta S作爲numpy的陣列tehm與日期添加:

>>> import datetime 
>>> import numpy as np 
>>> dates = np.array([datetime.datetime(2013, 1, 1, 0, 0), 
...  datetime.datetime(2013, 1, 2, 0, 0), 
...  datetime.datetime(2013, 2, 1, 0, 0)], dtype=object) 
>>> 
>>> h = np.asarray([3,5,2]) 
>>> hours = np.array([datetime.timedelta(hours=i) for i in h]) 
>>> 
>>> dates + hours 
array([datetime.datetime(2013, 1, 1, 3, 0), 
     datetime.datetime(2013, 1, 2, 5, 0), 
     datetime.datetime(2013, 2, 1, 2, 0)], dtype=object) 

或者,你可以以一個函數申請使用np.vectorize更Numpythonic接近你數組的項目,而不是使用列表理解。

>>> f = np.vectorize(lambda x: datetime.timedelta(hours=x)) 
>>> f(h) + dates 
array([datetime.datetime(2013, 1, 1, 3, 0), 
     datetime.datetime(2013, 1, 2, 5, 0), 
     datetime.datetime(2013, 2, 1, 2, 0)], dtype=object)