summaryrefslogtreecommitdiff
path: root/numpy/core/fromnumeric.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/core/fromnumeric.py')
-rw-r--r--numpy/core/fromnumeric.py87
1 files changed, 16 insertions, 71 deletions
diff --git a/numpy/core/fromnumeric.py b/numpy/core/fromnumeric.py
index f3930eaa9..f374951c9 100644
--- a/numpy/core/fromnumeric.py
+++ b/numpy/core/fromnumeric.py
@@ -16,6 +16,7 @@ import multiarray as mu
import umath as um
import numerictypes as nt
from numeric import asarray, array, asanyarray, concatenate
+import _methods
_dt_ = nt.sctype2char
import types
@@ -1482,12 +1483,12 @@ def sum(a, axis=None, dtype=None, out=None, skipna=False, keepdims=False):
try:
sum = a.sum
except AttributeError:
- return um.add.reduce(a, axis=axis, dtype=dtype,
+ return _methods._sum(a, axis=axis, dtype=dtype,
out=out, skipna=skipna, keepdims=keepdims)
# NOTE: Dropping the skipna and keepdims parameters here...
return sum(axis=axis, dtype=dtype, out=out)
else:
- return um.add.reduce(a, axis=axis, dtype=dtype,
+ return _methods._sum(a, axis=axis, dtype=dtype,
out=out, skipna=skipna, keepdims=keepdims)
def product (a, axis=None, dtype=None, out=None, skipna=False, keepdims=False):
@@ -1603,7 +1604,8 @@ def any(a, axis=None, out=None, skipna=False, keepdims=False):
(191614240, 191614240)
"""
- return um.logical_or.reduce(a, axis=axis, out=out, skipna=skipna, keepdims=keepdims)
+ return _methods._any(a, axis=axis, out=out,
+ skipna=skipna, keepdims=keepdims)
def all(a, axis=None, out=None, skipna=False, keepdims=False):
"""
@@ -1674,7 +1676,8 @@ def all(a, axis=None, out=None, skipna=False, keepdims=False):
(28293632, 28293632, array([ True], dtype=bool))
"""
- return um.logical_and.reduce(a, axis=axis, out=out, skipna=skipna, keepdims=keepdims)
+ return _methods._all(a, axis=axis, out=out,
+ skipna=skipna, keepdims=keepdims)
def cumsum (a, axis=None, dtype=None, out=None):
"""
@@ -1873,12 +1876,12 @@ def amax(a, axis=None, out=None, skipna=False, keepdims=False):
try:
amax = a.max
except AttributeError:
- return um.maximum.reduce(a, axis=axis,
+ return _methods._amax(a, axis=axis,
out=out, skipna=skipna, keepdims=keepdims)
# NOTE: Dropping the skipna and keepdims parameters
return amax(axis=axis, out=out)
else:
- return um.maximum.reduce(a, axis=axis,
+ return _methods._amax(a, axis=axis,
out=out, skipna=skipna, keepdims=keepdims)
def amin(a, axis=None, out=None, skipna=False, keepdims=False):
@@ -1947,12 +1950,12 @@ def amin(a, axis=None, out=None, skipna=False, keepdims=False):
try:
amin = a.min
except AttributeError:
- return um.minimum.reduce(a, axis=axis,
+ return _methods._amin(a, axis=axis,
out=out, skipna=skipna, keepdims=keepdims)
# NOTE: Dropping the skipna and keepdims parameters
return amin(axis=axis, out=out)
else:
- return um.minimum.reduce(a, axis=axis,
+ return _methods._amin(a, axis=axis,
out=out, skipna=skipna, keepdims=keepdims)
def alen(a):
@@ -2080,11 +2083,11 @@ def prod(a, axis=None, dtype=None, out=None, skipna=False, keepdims=False):
try:
prod = a.prod
except AttributeError:
- return um.multiply.reduce(a, axis=axis, dtype=dtype,
+ return _methods._prod(a, axis=axis, dtype=dtype,
out=out, skipna=skipna, keepdims=keepdims)
return prod(axis=axis, dtype=dtype, out=out)
else:
- return um.multiply.reduce(a, axis=axis, dtype=dtype,
+ return _methods._prod(a, axis=axis, dtype=dtype,
out=out, skipna=skipna, keepdims=keepdims)
def cumprod(a, axis=None, dtype=None, out=None):
@@ -2459,22 +2462,8 @@ def mean(a, axis=None, dtype=None, out=None, skipna=False, keepdims=False):
except AttributeError:
pass
- arr = asarray(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',
+ return _methods._mean(a, axis=axis, dtype=dtype,
out=out, skipna=skipna, 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)
- if isinstance(ret, mu.ndarray):
- um.true_divide(ret, rcount, out=ret, casting='unsafe')
- else:
- ret = ret / float(rcount)
- return ret
def std(a, axis=None, dtype=None, out=None, ddof=0,
@@ -2579,16 +2568,9 @@ def std(a, axis=None, dtype=None, out=None, ddof=0,
except AttributeError:
pass
- ret = var(a, axis=axis, dtype=dtype, out=out, ddof=ddof,
+ return _methods._std(a, axis=axis, dtype=dtype, out=out, ddof=ddof,
skipna=skipna, keepdims=keepdims)
- if isinstance(ret, mu.ndarray):
- um.sqrt(ret, out=ret)
- else:
- ret = um.sqrt(ret)
-
- return ret
-
def var(a, axis=None, dtype=None, out=None, ddof=0,
skipna=False, keepdims=False):
"""
@@ -2692,43 +2674,6 @@ def var(a, axis=None, dtype=None, out=None, ddof=0,
except AttributeError:
pass
- arr = asarray(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)
- 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)
- if isinstance(arrmean, mu.ndarray):
- um.true_divide(arrmean, rcount, out=arrmean, casting='unsafe')
- else:
- arrmean = arrmean / float(rcount)
-
- # arr - arrmean
- x = arr - arrmean
-
- # (arr - arrmean) ** 2
- if arr.dtype.kind == 'c':
- um.multiply(x, um.conjugate(x), out=x)
- x = x.real
- else:
- um.multiply(x, x, out=x)
-
- # add.reduce((arr - arrmean) ** 2, axis)
- ret = um.add.reduce(x, axis=axis, dtype=dtype, out=out,
+ return _methods._var(a, axis=axis, dtype=dtype, out=out, ddof=ddof,
skipna=skipna, keepdims=keepdims)
- # add.reduce((arr - arrmean) ** 2, axis) / (n - ddof)
- if not keepdims and isinstance(rcount, mu.ndarray):
- rcount = rcount.squeeze(axis=axis)
- rcount -= ddof
- if isinstance(ret, mu.ndarray):
- um.true_divide(ret, rcount, out=ret, casting='unsafe')
- else:
- ret = ret / float(rcount)
-
- return ret