Hi Eric,

Thank you so much for your answer!

That explains this interesting behavior:

>>> [np.datetime64('2008-04-01', f'{x}D') for x in range(1, 16)]

[numpy.datetime64('2008-04-01'),
 numpy.datetime64('2008-04-01','2D'),
 numpy.datetime64('2008-03-30','3D'),
 numpy.datetime64('2008-03-30','4D'),
 numpy.datetime64('2008-04-01','5D'),
 numpy.datetime64('2008-03-30','6D'),
 numpy.datetime64('2008-03-27','7D'),
 numpy.datetime64('2008-03-30','8D'),
 numpy.datetime64('2008-03-30','9D'),
 numpy.datetime64('2008-04-01','10D'),
 numpy.datetime64('2008-04-01','11D'),
 numpy.datetime64('2008-03-30','12D'),
 numpy.datetime64('2008-03-24','13D'),
 numpy.datetime64('2008-03-20','14D'),
 numpy.datetime64('2008-03-27','15D')]

Is there something to be done? Perhaps a change to the documentation?
I'm willing to open a PR with your notes from this thread.

Thanks!


On Thu, Sep 10, 2020 at 11:04 AM Eric Wieser <wieser.eric+nu...@gmail.com>
wrote:

> It's interesting to confirm that people are aware of this syntax!
>
> This is intended but perhaps not useful behavior.
>
> `datetime64[15D]` is a type that stores dates by the nearest date that is
> a multiple of 15 days from the unix epoch.
> Arguably there isn't a situation where using `15D` makes a whole lot of
> sense, but the generalization is useful - `datetime64[15m]` stores dates
> rounded to the nearest quarter hour, which is somewhat sensible.
>
> Perhaps we should have added support for a custom epoch, which would make
> your problem go away...
>
> On Thu, 10 Sep 2020 at 18:43, Dr. Mark Alexander Mikofski PhD <
> mikof...@berkeley.edu> wrote:
>
>> Hi,
>>
>> Thank you for your time.
>>
>> A colleague asked me about creating a range of numpy datetime64 at 15-day
>> increments.
>>
>> This works:
>>
>> np.arange(np.datetime64('2008-04-01'), np.datetime64('2020-09-01'), 
>> np.timedelta64(15, 'D'))
>>
>> but then they also showed me this, which leads to some very strange
>> responses:
>>
>> np.arange(np.datetime64('2008-04-01'), np.datetime64('2020-09-01'),
>> dtype="datetime64[15D]")
>> Out[50]:
>> array(['2008-03-27', '2008-04-11', '2008-04-26', '2008-05-11',
>>        '2008-05-26', '2008-06-10', '2008-06-25', '2008-07-10',
>> ...
>>        '2020-05-23', '2020-06-07', '2020-06-22', '2020-07-07',
>>        '2020-07-22', '2020-08-06'], dtype='datetime64[15D]')
>>
>> See how the 1st day is March 27th?
>>
>> I couldn't find a reference to this dtype ( "datetime64[15D]" ) in the
>> numpy docs, but I think it's a common pattern in Pandas, that is using a
>> number to get an increment of the frequency, for example "5T" is 5-minutes,
>> etc.
>>
>> There is a reference to using arange with dtype on the datetimes &
>> timedelta doc page () but the datetime is 1-day or  "datetime64[D]"
>>
>> Is this the intended outcome? Or is it a side effect?
>>
>> I wonder if others have tried to adapt Pandas patterns to Numpy
>> datetimes, and if it's an issue for anyone else.
>>
>> I've advised my colleague not to use Numpy datetimes like this, assuming
>> based on the docs that Pandas-style offsets do not translate into Numpy
>> style datetimes.
>>
>> thanks!
>>
>> --
>> Mark Mikofski, PhD (2005)
>> *Fiat Lux*
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion@python.org
>> https://mail.python.org/mailman/listinfo/numpy-discussion
>>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>


-- 
Mark Mikofski, PhD (2005)
*Fiat Lux*
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion

Reply via email to