[Numpy-discussion] proposed changes to array printing in 1.14

Allan Haldane allanhaldane at gmail.com
Thu Jun 29 15:38:26 EDT 2017

Hello all,

There are various updates to array printing in preparation for numpy
1.14. See https://github.com/numpy/numpy/pull/9139/

Some are quite likely to break other projects' doc-tests which expect a
particular str or repr of arrays, so I'd like to warn the list in case
anyone has opinions.

The current proposed changes, from most to least painful by my
reckoning, are:

For float arrays, an extra space previously used for the sign position
will now be omitted in many cases. Eg, `repr(arange(4.))` will now
return 'array([0., 1., 2., 3.])' instead of 'array([ 0.,  1.,  2.,  3.])'.

The printing of 0d arrays is overhauled. This is a bit finicky to
describe, please see the release note in the PR. As an example of the
effect of this, the `repr(np.array(0.))` now prints as 'array(0.)`
instead of 'array(0.0)'. Also the repr of 0d datetime arrays is now like
"array('2005-04-04', dtype='datetime64[D]')" instead of
"array(datetime.date(2005, 4, 4), dtype='datetime64[D]')".

User-defined dtypes which did not properly implement their `repr` (and
`str`) should do so now. Otherwise it now falls back to
`object.__repr__`, which will return something ugly like
`<mytype object at 0x7f37f1b4e918>`. (Previously you could depend on
only implementing the `item` method and the repr of that would be
printed. But no longer, because this risks infinite recursions.).

Bool arrays of size 1 with a 'True' value will now omit a space, so that
`repr(array([True]))` is now 'array([True])' instead of
'array([ True])'.


More information about the NumPy-Discussion mailing list