[Numpy-discussion] rank-0 arrays

Konrad Hinsen hinsen at cnrs-orleans.fr
Sun Sep 15 03:13:02 EDT 2002


"eric jones" <eric at enthought.com> writes:

> Reductions and indexing return different types based on the number of
> dimensions of the input array:
> 
> >>> b = sum(a)
> >>> l = len(b) # or whatever
> 
> This code works happily if "a" is 2 or more dimensions, but will fail if
> it is 1d because the sum(a) will return a scalar in this case.  To write

And it should fail, because a rank-0 array is not a sequence, so it
doesn't have a length.

But there are valid examples in which it would be nice if scalars
were arrays (but probably if  *all* scalars supported array operations,
not just those that were generated by indexing from arrays):

- a.shape  should return () for a scalar (and (len(a),) for any
           sequence type)

- a.astype(N.Float) should also work for scalars

Similarly, it would be nice if complex operations (real/imaginary
part) would work on integers and floats.

There's one more annoying difference between scalars and arrays of
any rank which I think should be removed in numarray:

  >>> 3 % -2
  -1
  >>> array(3) % 2
  1
  >>> fmod(3, -2)
  1.0

I.e. the mod operation uses fmod() for arrays, but different rules
for standard Python numbers.

Konrad.
-- 
-------------------------------------------------------------------------------
Konrad Hinsen                            | E-Mail: hinsen at cnrs-orleans.fr
Centre de Biophysique Moleculaire (CNRS) | Tel.: +33-2.38.25.56.24
Rue Charles Sadron                       | Fax:  +33-2.38.63.15.17
45071 Orleans Cedex 2                    | Deutsch/Esperanto/English/
France                                   | Nederlands/Francais
-------------------------------------------------------------------------------




More information about the NumPy-Discussion mailing list