A Tuesday 29 July 2008, Francesc Alted escrigué:
[snip]
> > > In [12]: t[0]
> > > Out[12]: 24 # representation as an int64
> >
> > why not a "pretty" representation of timedelta64 too? I'd like that
> > better (at least for __str__, perhaps __repr__ should be the raw
> > numbers.
>
> That could be an interesting feature. Here it is what the
> ``datetime``
>
> module does:
> >>> delta = datetime.datetime(1980,2,1)-datetime.datetime(1970,1,1)
> >>> delta.__str__()
>
> '3683 days, 0:00:00'
>
> >>> delta.__repr__()
>
> 'datetime.timedelta(3683)'
>
> For the NumPy ``timedelta64`` with a time unit of days, it could be
>
> something like:
> >>> delta_days.__str__()
>
> '3683 days'
>
> >>> delta_days.__repr__()
>
> 3683
>
> while for a ``timedelta64`` with a time unit of microseconds it could
>
> be:
> >>> delta_us.__str__()
>
> '3683 days, 3:04:05.000064'
>
> >>> delta_us.__repr__()
>
> 318222245000064
>
> But I'm open to other suggestions, of course.
Sorry, but I've been a bit inconsistent here as this is documented in
the proposal already. Just to clarify things, here it goes the
str/repr suggestions (just a bit more populated with examples) in the
second version of the second proposal.
For absolute times:
In [5]: numpy.datetime64(42, 'us')
Out[5]: datetime64(42, 'us')
In [6]: print numpy.datetime64(42)
1970-01-01T00:00:00.000042 # representation in ISO 8601 format
In [7]: print numpy.datetime64(367.7, 'D') # decimal part is lost
1971-01-02 # still ISO 8601 format
In [8]: numpy.datetime('2008-07-18T12:23:18', 'm') # from ISO 8601
Out[8]: datetime64(20273063, 'm')
In [9]: print numpy.datetime('2008-07-18T12:23:18', 'm')
Out[9]: 2008-07-18T12:23
In [10]: t = numpy.zeros(5, dtype="datetime64[D]")
In [11]: print t
[1970-01-01 1970-01-01 1970-01-01 1970-01-01 1970-01-01]
In [12]: repr(t)
Out[12]: array([0, 0, 0, 0, 0], dtype="datetime64[D]")
In [13]: print t[0]
1970-01-01
In [14]: t[0]
Out[14]: datetime64(0, unit='D')
In [15]: t[0].item() # getter in action
Out[15]: datetime.datetime(1970, 1, 1, 0, 0)
For relative times:
In [5]: numpy.timedelta64(10, 'us')
Out[5]: timedelta64(10, 'us')
In [6]: print numpy.timedelta64(10, 'ms')
0:00:00.010
In [7]: print numpy.timedelta64(3600.2, 'm') # decimal part is lost
2 days, 12:00
In [8]: t0 = numpy.zeros(5, dtype="datetime64[ms]")
In [9]: t1 = numpy.ones(5, dtype="datetime64[ms]")
In [10]: t = t1 - t1
In [11]: t[0] = datetime.timedelta(0, 24) # setter in action
In [12]: print t
[0:00:24.000 0:00:01.000 0:00:01.000 0:00:01.000 0:00:01.000]
In [13]: repr(t)
Out[13]: array([24000, 1, 1, 1, 1], dtype="timedelta64[ms]")
In [14]: print t[0]
0:00:24.000
In [15]: t[0]
Out[15]: timedelta(24000, unit='ms')
In [16]: t[0].item() # getter in action
Out[16]: datetime.timedelta(0, 24)
Cheers,
--
Francesc Alted
_______________________________________________
Numpy-discussion mailing list
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion