[Numpy-discussion] Do we want scalar casting to behave as it does at the moment?

Matthew Brett matthew.brett@gmail....
Mon Nov 12 13:54:06 CST 2012


Hi,

I wanted to check that everyone knows about and is happy with the
scalar casting changes from 1.6.0.

Specifically, the rules for (array, scalar) casting have changed such
that the resulting dtype depends on the _value_ of the scalar.

Mark W has documented these changes here:

http://docs.scipy.org/doc/numpy/reference/ufuncs.html#casting-rules
http://docs.scipy.org/doc/numpy/reference/generated/numpy.result_type.html
http://docs.scipy.org/doc/numpy/reference/generated/numpy.promote_types.html

Specifically, as of 1.6.0:

In [19]: arr = np.array([1.], dtype=np.float32)

In [20]: (arr + (2**16-1)).dtype
Out[20]: dtype('float32')

In [21]: (arr + (2**16)).dtype
Out[21]: dtype('float64')

In [25]: arr = np.array([1.], dtype=np.int8)

In [26]: (arr + 127).dtype
Out[26]: dtype('int8')

In [27]: (arr + 128).dtype
Out[27]: dtype('int16')

There's discussion about the changes here:

http://mail.scipy.org/pipermail/numpy-discussion/2011-September/058563.html
http://mail.scipy.org/pipermail/numpy-discussion/2011-March/055156.html
http://mail.scipy.org/pipermail/numpy-discussion/2012-February/060381.html

It seems to me that this change is hard to explain, and does what you
want only some of the time, making it a false friend.

Is it the right behavior for numpy 2.0?

Cheers,

Matthew


More information about the NumPy-Discussion mailing list