[Numpy-discussion] rank-0 arrays

Konrad Hinsen hinsen at cnrs-orleans.fr
Sun Sep 15 12:41:04 EDT 2002


> > And it should fail, because a rank-0 array is not a sequence, so it
> > doesn't have a length.
> 
> I disagree. You should not have to write special code to check for a
> specific case.  It breaks one of the beauties of Numeric -- i.e. you can

It is not a specific case, more like a specific value (for the rank).
1/a fails for a == 0, should that be changed as well?

Let's examine some equivalent code pieces:

- len(a) == a.shape[0]
  the second fails for rank 0, so the first one should fail as well

- for i in range(len(a)):  print a[i]
  works for all sequences. If len(a) doesn't fail (and I assume it would
  then return 1), a[1] shouldn't fail either.

- len(a) == len(list(a))
  for all sequences a. Should list(a) return [a] for a rank-0 array?
  For a scalar it fails.

Actually this might be an argument for not having rank-0 arrays at all.
Arrays are multidimensional sequences, but rank-0 arrays aren't.

> returns its length along its "first" axis.  This will always be 1.  It
> allows for generic code.

Then please give an example where this genericity would be useful.

> On this note:
> I do not see the benefit of making a scalar type object that is separate
> for 0d arrays.  It seems to remove instead of enhance capabilities.
> What does a scalar object buy that simply using 0d arrays for that
> purpose does not?

Compatibility, for example the ability to index a sequence with an
element of an integer array. Also consistency with other Python
sequence types. For example,

   [a][0] == a

so one would expect also

   array([a])[0] == a

but this would not be fully true if the left-hand side is a rank-0
array.

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