Some corner cases in the mean, var, std.

Empty arrays

I think these cases should either raise an error or just return nan. Warnings seem ineffective to me as they are only issued once by default.

In [3]: ones(0).mean()
/home/charris/.local/lib/python2.7/site-packages/numpy/core/_methods.py:61: RuntimeWarning: invalid value encountered in double_scalars
  ret = ret / float(rcount)
Out[3]: nan

In [4]: ones(0).var()
/home/charris/.local/lib/python2.7/site-packages/numpy/core/_methods.py:76: RuntimeWarning: invalid value encountered in true_divide
  out=arrmean, casting='unsafe', subok=False)
/home/charris/.local/lib/python2.7/site-packages/numpy/core/_methods.py:100: RuntimeWarning: invalid value encountered in double_scalars
  ret = ret / float(rcount)
Out[4]: nan

In [5]: ones(0).std()
/home/charris/.local/lib/python2.7/site-packages/numpy/core/_methods.py:76: RuntimeWarning: invalid value encountered in true_divide
  out=arrmean, casting='unsafe', subok=False)
/home/charris/.local/lib/python2.7/site-packages/numpy/core/_methods.py:100: RuntimeWarning: invalid value encountered in double_scalars
  ret = ret / float(rcount)
Out[5]: nan

ddof >= number of elements

I think these should just raise errors. The results for ddof >= #elements is happenstance, and certainly negative numbers should never be returned.

In [6]: ones(2).var(ddof=2)
/home/charris/.local/lib/python2.7/site-packages/numpy/core/_methods.py:100: RuntimeWarning: invalid value encountered in double_scalars
  ret = ret / float(rcount)
Out[6]: nan

In [7]: ones(2).var(ddof=3)
Out[7]: -0.0

nansum


Currently returns nan for empty arrays. I suspect it should return nan for slices that are all nan, but 0 for empty slices. That would make it consistent with sum in the empty case.

Chuck