Creating numpy linspace out of datetime
As far as I know, np.linspace does not support datetime objects. But perhaps we can make our own function which roughly simulates it:
def date_linspace(start, end, steps):
delta = (end - start) / steps
increments = range(0, steps) * np.array([delta]*steps)
return start + increments
This should give you an np.array with dates going from start
to end
in steps
steps (not including the end date, can be easily modified).
As of pandas 0.23 you can use date_range:
import pandas as pd
x = pd.date_range(min(dates), max(dates), periods=500).to_pydatetime()
Update - 2022
As pointed out by @Joooeey and @Ehtesh Choudhury, pandas
now has date_range
, which makes creating numpy.linspace
-like time series much simpler.
t = pd.date_range(start='2022-03-10',
end='2022-03-15',
periods=5)
If it's important to have this time series as a numpy
array, simply
>>> t.values
array(['2022-03-10T00:00:00.000000000', '2022-03-11T06:00:00.000000000',
'2022-03-12T12:00:00.000000000', '2022-03-13T18:00:00.000000000',
'2022-03-15T00:00:00.000000000'], dtype='datetime64[ns]')
Original answer
Have you considered using pandas
? Using an approach from this possible duplicate question, you can make use of np.linspace
in the following way
import pandas as pd
start = pd.Timestamp('2015-07-01')
end = pd.Timestamp('2015-08-01')
t = np.linspace(start.value, end.value, 100)
t = pd.to_datetime(t)
To obtain an np.array
of the linear timeseries
In [3]: np.asarray(t)
Out[3]:
array(['2015-06-30T17:00:00.000000000-0700',
'2015-07-01T00:30:54.545454592-0700',
'2015-07-01T08:01:49.090909184-0700',
...
'2015-07-31T01:58:10.909090816-0700',
'2015-07-31T09:29:05.454545408-0700',
'2015-07-31T17:00:00.000000000-0700'], dtype='datetime64[ns]')
import numpy # 1.15
start = numpy.datetime64('2001-01-01')
end = numpy.datetime64('2019-01-01')
# Linspace in days:
days = numpy.linspace(start.astype('f8'), end.astype('f8'), dtype='<M8[D]')
# Linspace in milliseconds
MS1D = 24 * 60 * 60 * 1000
daytimes = numpy.linspace(start.astype('f8') * MS1D, end.astype('f8') * MS1D, dtype='<M8[ms]')