[Numpy-discussion] Thoughts about zero dimensional arrays vs Python scalars

Colin J. Williams cjw at sympatico.ca
Sun Mar 20 08:42:16 EST 2005

Ralf Juengling wrote:

>Discussing zero dimensional arrays, the PEP says at one point:
>   ... When ndarray is imported, it will alter the numeric table
>   for python int, float, and complex to behave the same as 
>   array objects. 
>   Thus, in the proposed solution, 0-dim arrays would never be
>   returned from calculation, but instead, the equivalent Python
>   Array Scalar Type.  Internally, these ArrayScalars can
>   be quickly converted to 0-dim arrays when needed.  Each scalar
>   would also have a method to convert to a "standard" Python Type
>   upon request (though this shouldn't be needed often).
>I'm not sure I understand this. Does it mean that, after having
>imported ndarray, "type(1)" to "ndarray.IntArrType" rather than 
>If so, I think this is a dangerous idea. There is one important
>difference between zero dimensional arrays and Python scalar 
>types, which is not discussed in the PEP: arrays are mutable, 
>Python scalars are immutable.
>When Guido introduced in-place operators in Python, (+=, *=, 
>etc.) he decided that "i += 1" should be allowed for Python
>scalars and should mean "i = i + 1". Here you have it, it 
>means something different when i is a mutable zero dimensional
>array. So, I suspect a tacit re-definition of Python scalars
>on ndarray import will break some code out there (code, that
>does not deal with arrays at all). 
>Facing this important difference between arrays and Python
>scalars, I'm also not sure anymore that advertising zero
>dimensional arrays as essentially the same as Python scalars
>is such a good idea. Perhaps it would be better not to try to
>inherit from Python's number types and all that. Perhaps it
>would be easier to just say that indexing an array always 
>results in an array and that zero dimensional arrays can be 
>converted into Python scalars. Period.
>PS: You wrote two questions about zero dimensional arrays 
>vs Python scalars into the PEP. What are your plans for 
>deciding these?
It looks as though a decision has been made.  I was among those who 
favoured abandoning rank-0 arrays, we lost.

To my mind rank-0 arrays add complexity for little benefit and make 
explanation more difficult.

I don't spot any discussion in the PEP of the pros and cons of the nd == 
0 case.

Colin W.

More information about the NumPy-Discussion mailing list