# [PYTHON MATRIX-SIG] Re: sum() in 1.0a2 + indexing BUG

**Carlos Fonseca
**
Carlos Fonseca <fonseca@gaivota.demon.co.uk>

*Sun, 18 Aug 1996 15:40:54 +0100 (BST)*

First, the bug:
>>>* from Numeric import *
*>>>* array(0)[0:]
*
On Sun, 18 Aug 1996, Konrad Hinsen wrote:
>*
*>* I think sum(a) (and other reductions) should return an array with shape ()
*>* when a is 1d, and not a scalar. Currently, sum(a).anyarraymethod and
*>* sum(a)[0] will fail if a is 1d.
*>*
*>* Which is precisely why I have always insisted that array operations
*>* should be implemented as functions and not as methods.
*>*
*>* Of course the alternative would be to make rank-0 arrays distinct from
*>* scalars, and this alternative has been discussed a lot in the early
*>* days of the Matrix SIG. But it creates a few fundamental
*>* problems. Everyones idea of arrays is that they are collections of
*>* scalars, and one expects to be able to pick the scalars from an array
*>* by indexing. But if rank-0 arrays are distinct from scalars,
*>* indexing a rank-1 array would return a rank-0 array. Worse, there
*>* would be no obvious way to extract a real scalar from a rank-0
*>* array, so another conversion function would be necessary. The
*>* resulting system would be extremely confusing to users.
*
My message referred to reductions, not to indexing. Indexing could still
return scalars, where appropriate.
I understand that indexing with scalars (but not with slices!) could be
seen as a reduction, and thus made to return a null-shape array, leading
to the situation you describe. Perhaps indexing into a null-shape array
could return the scalar? This works in the present implementation. But see
below...
>* Not having specific rank-0 objects is therefore the lesser evil,
*>* but then we have to live with the implementation limitations
*>* given by the Python interpreter.
*>*
*>* Konrad.
*>*
*
But we *do* have them:
>>>* from Numeric import *
*>>>* a=array(5)
*>>>* a.shape
*()
>>>* a[0]
*5
It is fair to expect the array constructor to return an array. Perhaps
it should return one with shape (1,)? But then, what about array([5])?
Carlos
=================
MATRIX-SIG - SIG on Matrix Math for Python
send messages to: matrix-sig@python.org
administrivia to: matrix-sig-request@python.org
=================