How can I make a python numpy arange of datetime

故事扮演 提交于 2019-11-29 01:11:08
nneonneo

See NumPy Datetimes and Timedeltas. Basically, you can represent datetimes in NumPy using the numpy.datetime64 type, which permits you to do ranges of values.

For NumPy 1.6, which has a much less useful datetime64 type, you can use a suitable list comprehension to build the datetimes (see also Creating a range of dates in Python):

base = datetime.datetime(2000, 1, 1)
arr = numpy.array([base + datetime.timedelta(hours=i) for i in xrange(24)])

This produces

array([2000-01-01 00:00:00, 2000-01-01 01:00:00, 2000-01-01 02:00:00,
   2000-01-01 03:00:00, 2000-01-01 04:00:00, 2000-01-01 05:00:00,
   2000-01-01 06:00:00, 2000-01-01 07:00:00, 2000-01-01 08:00:00,
   2000-01-01 09:00:00, 2000-01-01 10:00:00, 2000-01-01 11:00:00,
   2000-01-01 12:00:00, 2000-01-01 13:00:00, 2000-01-01 14:00:00,
   2000-01-01 15:00:00, 2000-01-01 16:00:00, 2000-01-01 17:00:00,
   2000-01-01 18:00:00, 2000-01-01 19:00:00, 2000-01-01 20:00:00,
   2000-01-01 21:00:00, 2000-01-01 22:00:00, 2000-01-01 23:00:00], dtype=object)
Arc Shinus
from datetime import datetime, timedelta

t = np.arange(datetime(1985,7,1), datetime(2015,7,1), timedelta(days=1)).astype(datetime)

The key point here is to use astype(datetime), otherwise the result will be datetime64.

With modern NumPy you can do this:

np.arange(np.datetime64('2017-01-01'), np.datetime64('2017-01-08'))

And it gives you:

array(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
       '2017-01-05', '2017-01-06', '2017-01-07'], dtype='datetime64[D]')

Note that @nneonneo solution can be simplified in

result = first_date + np.arange(24) * datetime.timedelta(hours=1)

thanks to NumPy array manipulations. The result array has then a dtype=object.

For more complex ranges, you might be interested in the scikits.timeseries package (no longer maintained) or better, the pandas package that reimplemented most of the ideas of scikits.timeseries. Both packages support older versions of NumPy (1.5, 1.6...)

As noted in another answer, for Numpy > 1.7, you can use Numpy's built-in datetime capability. The examples in the Numpy documentation don't include using np.arange with steps, so here's one:

timearray = np.arange('2000-01-01', '2000-01-02',np.timedelta64(1,'h'), dtype='datetime64')

Numpy sets the dtype of this result to datetime64[h]. You can set this explicitly to some smaller unit of time with dtype='datetime64[m]'.

In version 1.8.1 (and I expect earlier), trying to add an offset to that result array that is smaller than an hour will have no effect.

  • timearray += np.timedelta64(10,'s') does not change timearray
  • timearray2 = timearray + np.timedelta64(10,'s') will add 10 seconds to timearray and converts the dtype of timearray2 to datetime64[s]
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!