[Numpy-discussion] why is default axis always different?

Sven Schreiber svetosch at gmx.net
Sat Aug 12 16:35:36 CDT 2006

Sven Schreiber schrieb:
> Hi,
> notice the (confusing, imho) different defaults for the axis of the
> following related functions:
> nansum(a, axis=-1)
>     Sum the array over the given axis, treating NaNs as 0.
> sum(x, axis=None, dtype=None)
>     Sum the array over the given axis.  The optional dtype argument
>     is the data type for intermediate calculations.
> average(a, axis=0, weights=None, returned=False)
>     average(a, axis=0, weights=None, returned=False)
>     Average the array over the given axis.  If the axis is None, average
>     over all dimensions of the array.  Equivalent to a.mean(axis), but
>     with a default axis of 0 instead of None.
>>>> numpy.__version__
> '1.0b2.dev2973'
> Shouldn't those kind of functions have the same default behavior? So is
> this a bug or am I missing something?
> Thanks for enlightenment,
> Sven

Perhaps this is useful for others, so I'll share my self-enlightenment
(please correct me if I got it wrong):

- sum's axis=None default actually conforms to what's in the numpy 1.0
release notes (functions that match methods should also get their
default, which for such methods is axis=None)

- nansum's axis=-1 default is normal for functions which don't match
equivalent methods

- However, I still don't understand why then average() doesn't have
axis=-1 as its default like other functions...? Apparently the axis=0
default of average() is its main feature, explaining its existence
vis-à-vis .mean. But that seems inconsistent to me, as it breaks all the
rules: It doesn't conform to the standard axis=-1 default for functions,
and if it's viewed as equivalent to the .mean method (which it is), it
doesn't conform to the rule that it should share the latter's default

So imho it seems like there's no real use for average() other than
creating confusion. (Well that sounds a bit too strong, but anyway...) I
therefore suggest to officially deprecate it and move it to some
compatibility module. I'm going to file a corresponding ticket tomorrow
unless somebody tells me not to.


More information about the Numpy-discussion mailing list