[Numpy-discussion] Matching 0-d arrays and NumPy scalars
Travis E. Oliphant
Thu Feb 21 13:30:11 CST 2008
> You have been getting mostly objections so far;
I wouldn't characterize it that way, but yes 2 people have pushed back a
bit, although one not directly speaking to the proposed behavior.
The issue is that  notation does more than just "select from a
container" for NumPy arrays. In particular, it is used to reshape an
array to more dimensions: [..., newaxis]
A common pattern is to reduce over a dimension and then re-shape the
result so that it can be combined with the un-reduced object.
Broadcasting makes this work if the dimension being reduced along is the
first dimension. But, broadcasting is not enough if you want the
reduction dimension to be arbitrary:
y = add.reduce(x, axis=-1) produces an N-1 array if x is 2-d and a
numpy scalar if x is 1-d.
Suppose y needs to be subtracted from x.
If x is 2-d, then
>>> x - y[...,newaxis]
is the needed code. But, if x is 1-d, then
>>> x - y[..., newaxis]
returns an error and a check must be done to handle the case
separately. If y[..., newaxis] worked and produced a 1-d array when y
was a numpy scalar, this could be avoided.
More information about the Numpy-discussion