[Numpy-discussion] A case for rank-0 arrays
faltet at carabos.com
Fri Feb 24 01:01:02 CST 2006
A Dissabte 18 Febrer 2006 20:49, Sasha va escriure:
> Here are three suggestions:
> 1. Probably the most controversial question is what getitem should
> return. I believe that most of the confusion comes from the fact that
> the same syntax implements two different operations: indexing and
> projection (for the lack of better name). Using the analogy between
> ndarrays and functions, indexing is just the application of the
> function to its arguments and projection is the function projection
> ((f, x) -> lambda (*args): f(x, *args)).
> The problem is that the same syntax results in different operations
> depending on the rank of the array.
> >>> x = ones((2,2))
> >>> y = ones(2)
> then x is projection and type(x) is ndarray, but y is
> indexing and type(y) is int32. Similarly, y[1,...] is indexing,
> while x[1,...] is projection.
> I propose to change numpy rules so that if ellipsis is present inside
> , the operation is always projection and both y[1,...] and
> x[1,1,...] return zero-rank arrays. Note that I have previously
> rejected Francesc's idea that x[...] and x[()] should have different
> meaning for zero-rank arrays. I was wrong.
+1 (if I want to be consequent ;-)
I guess that this would imply that:
In : z=numpy.array(1)
In : type(z[()])
Out: <type 'int32scalar'>
In : type(z[...])
Out: <type 'numpy.ndarray'>
> 2. Another source of ambiguity is the various "reduce" operations such
> as sum or max. Using the previous example, type(x.sum(axis=0)) is
> ndarray, but type(y.sum(axis=0)) is int32. I propose two changes:
> a. Make x.sum(axis) return ndarray unless axis is None, making
> type(y.sum(axis=0)) is ndarray true in the example.
> b. Allow axis to be a sequence of ints and make
> x.sum(axis=range(rank(x))) return rank-0 array according to the rule
> 2.a above.
> c. Make x.sum() raise an error for rank-0 arrays and scalars, but
> allow x.sum(axis=()) to return x. This will make numpy sum consistent
> with the built-in sum that does not work on scalars.
Well, to say the truth, I've not a strong opinion on this one (this is
why I "mostly" supported your proposal ;-), but I think that if Travis
has reasons to oppose to it, we should listen to him.
> 3. This is a really small change currently
> I propose to make shape=() valid in ndarray constructor.
>0,0< Francesc Altet http://www.carabos.com/
V V Cárabos Coop. V. Enjoy Data
More information about the Numpy-discussion