我有一系列日期:
>>> 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循环更好的东西。
答案 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)