Python:向日期向量元素添加小时向量

时间:2016-07-15 18:43:41

标签: python datetime numpy

我有一系列日期:

>>> 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 个答案:

答案 0 :(得分: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)

或者作为更多Numpythonic方法,您可以使用np.vectorize将函数应用于数组的项而不是使用列表推导。

>>> 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)