diff options
Diffstat (limited to 'numpy/core/_methods.py')
-rw-r--r-- | numpy/core/_methods.py | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/numpy/core/_methods.py b/numpy/core/_methods.py index 80e12298c..d3c150ac8 100644 --- a/numpy/core/_methods.py +++ b/numpy/core/_methods.py @@ -5,34 +5,51 @@ from numpy.core import multiarray as mu from numpy.core import umath as um from numpy.core.numeric import asanyarray -def _amax(a, axis=None, out=None, skipna=False, keepdims=False): +def _amax(a, axis=None, out=None, keepdims=False): return um.maximum.reduce(a, axis=axis, - out=out, skipna=skipna, keepdims=keepdims) + out=out, keepdims=keepdims) -def _amin(a, axis=None, out=None, skipna=False, keepdims=False): +def _amin(a, axis=None, out=None, keepdims=False): return um.minimum.reduce(a, axis=axis, - out=out, skipna=skipna, keepdims=keepdims) + out=out, keepdims=keepdims) -def _sum(a, axis=None, dtype=None, out=None, skipna=False, keepdims=False): +def _sum(a, axis=None, dtype=None, out=None, keepdims=False): return um.add.reduce(a, axis=axis, dtype=dtype, - out=out, skipna=skipna, keepdims=keepdims) + out=out, keepdims=keepdims) -def _prod(a, axis=None, dtype=None, out=None, skipna=False, keepdims=False): +def _prod(a, axis=None, dtype=None, out=None, keepdims=False): return um.multiply.reduce(a, axis=axis, dtype=dtype, - out=out, skipna=skipna, keepdims=keepdims) - -def _mean(a, axis=None, dtype=None, out=None, skipna=False, keepdims=False): + out=out, keepdims=keepdims) + +def _any(a, axis=None, dtype=None, out=None, keepdims=False): + return um.logical_or.reduce(a, axis=axis, dtype=dtype, out=out, + keepdims=keepdims) + +def _all(a, axis=None, dtype=None, out=None, keepdims=False): + return um.logical_and.reduce(a, axis=axis, dtype=dtype, out=out, + keepdims=keepdims) + +def _count_reduce_items(arr, axis): + if axis is None: + axis = tuple(xrange(arr.ndim)) + if not isinstance(axis, tuple): + axis = (axis,) + items = 1 + for ax in axis: + items *= arr.shape[ax] + return items + +def _mean(a, axis=None, dtype=None, out=None, keepdims=False): arr = asanyarray(a) # Upgrade bool, unsigned int, and int to float64 if dtype is None and arr.dtype.kind in ['b','u','i']: ret = um.add.reduce(arr, axis=axis, dtype='f8', - out=out, skipna=skipna, keepdims=keepdims) + out=out, keepdims=keepdims) else: ret = um.add.reduce(arr, axis=axis, dtype=dtype, - out=out, skipna=skipna, keepdims=keepdims) - rcount = mu.count_reduce_items(arr, axis=axis, - skipna=skipna, keepdims=keepdims) + out=out, keepdims=keepdims) + rcount = _count_reduce_items(arr, axis) if isinstance(ret, mu.ndarray): ret = um.true_divide(ret, rcount, out=ret, casting='unsafe', subok=False) @@ -41,18 +58,15 @@ def _mean(a, axis=None, dtype=None, out=None, skipna=False, keepdims=False): return ret def _var(a, axis=None, dtype=None, out=None, ddof=0, - skipna=False, keepdims=False): + keepdims=False): arr = asanyarray(a) # First compute the mean, saving 'rcount' for reuse later if dtype is None and arr.dtype.kind in ['b','u','i']: - arrmean = um.add.reduce(arr, axis=axis, dtype='f8', - skipna=skipna, keepdims=True) + arrmean = um.add.reduce(arr, axis=axis, dtype='f8', keepdims=True) else: - arrmean = um.add.reduce(arr, axis=axis, dtype=dtype, - skipna=skipna, keepdims=True) - rcount = mu.count_reduce_items(arr, axis=axis, - skipna=skipna, keepdims=True) + arrmean = um.add.reduce(arr, axis=axis, dtype=dtype, keepdims=True) + rcount = _count_reduce_items(arr, axis) if isinstance(arrmean, mu.ndarray): arrmean = um.true_divide(arrmean, rcount, out=arrmean, casting='unsafe', subok=False) @@ -69,8 +83,7 @@ def _var(a, axis=None, dtype=None, out=None, ddof=0, x = um.multiply(x, x, out=x) # add.reduce((arr - arrmean) ** 2, axis) - ret = um.add.reduce(x, axis=axis, dtype=dtype, out=out, - skipna=skipna, keepdims=keepdims) + ret = um.add.reduce(x, axis=axis, dtype=dtype, out=out, keepdims=keepdims) # add.reduce((arr - arrmean) ** 2, axis) / (n - ddof) if not keepdims and isinstance(rcount, mu.ndarray): @@ -84,10 +97,9 @@ def _var(a, axis=None, dtype=None, out=None, ddof=0, return ret -def _std(a, axis=None, dtype=None, out=None, ddof=0, - skipna=False, keepdims=False): +def _std(a, axis=None, dtype=None, out=None, ddof=0, keepdims=False): ret = _var(a, axis=axis, dtype=dtype, out=out, ddof=ddof, - skipna=skipna, keepdims=keepdims) + keepdims=keepdims) if isinstance(ret, mu.ndarray): ret = um.sqrt(ret, out=ret) |