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.py485
1 files changed, 485 insertions, 0 deletions
diff --git a/numpy/core/fromnumeric.py b/numpy/core/fromnumeric.py
new file mode 100644
index 000000000..da8fe7f3c
--- /dev/null
+++ b/numpy/core/fromnumeric.py
@@ -0,0 +1,485 @@
+# Module containing non-deprecated functions borrowed from Numeric.
+
+__all__ = ['asarray', 'array', 'concatenate',
+ # functions that are now methods
+ 'take', 'reshape', 'choose', 'repeat', 'put', 'putmask',
+ 'swapaxes', 'transpose', 'sort', 'argsort', 'argmax', 'argmin',
+ 'searchsorted', 'alen',
+ 'resize', 'diagonal', 'trace', 'ravel', 'nonzero', 'shape',
+ 'compress', 'clip', 'sum', 'product', 'prod', 'sometrue', 'alltrue',
+ 'any', 'all', 'cumsum', 'cumproduct', 'cumprod', 'ptp', 'ndim',
+ 'rank', 'size', 'around', 'round_', 'mean', 'std', 'var', 'squeeze',
+ 'amax', 'amin',
+ ]
+
+import multiarray as mu
+import umath as um
+import numerictypes as nt
+from numeric import asarray, array, asanyarray, correlate, outer, concatenate
+from umath import sign, absolute, multiply
+import numeric as _nx
+import sys
+_dt_ = nt.sctype2char
+
+import types
+
+try:
+ _gentype = types.GeneratorType
+except AttributeError:
+ _gentype = types.NoneType
+
+# save away Python sum
+_sum_ = sum
+
+# functions that are now methods
+def _wrapit(obj, method, *args, **kwds):
+ try:
+ wrap = obj.__array_wrap__
+ except AttributeError:
+ wrap = None
+ result = getattr(asarray(obj),method)(*args, **kwds)
+ if wrap and isinstance(result, mu.ndarray):
+ if not isinstance(result, mu.ndarray):
+ result = asarray(result)
+ result = wrap(result)
+ return result
+
+def take(a, indices, axis=0):
+ try:
+ take = a.take
+ except AttributeError:
+ return _wrapit(a, 'take', indices, axis)
+ return take(indices, axis)
+
+# not deprecated --- copy if necessary, view otherwise
+def reshape(a, newshape, order='C'):
+ """Change the shape of a to newshape. Return a new view object if possible
+ otherwise return a copy.
+ """
+ try:
+ reshape = a.reshape
+ except AttributeError:
+ return _wrapit(a, 'reshape', newshape, order=order)
+ return reshape(newshape, order=order)
+
+def choose(a, choices):
+ try:
+ choose = a.choose
+ except AttributeError:
+ return _wrapit(a, 'choose', choices)
+ return choose(choices)
+
+def repeat(a, repeats, axis=0):
+ """repeat elements of a repeats times along axis
+ repeats is a sequence of length a.shape[axis]
+ telling how many times to repeat each element.
+ If repeats is an integer, it is interpreted as
+ a tuple of length a.shape[axis] containing repeats.
+ The argument a can be anything array(a) will accept.
+ """
+ try:
+ repeat = a.repeat
+ except AttributeError:
+ return _wrapit(a, 'repeat', repeats, axis)
+ return repeat(repeats, axis)
+
+def put (a, ind, v):
+ """put(a, ind, v) results in a[n] = v[n] for all n in ind
+ If v is shorter than mask it will be repeated as necessary.
+ In particular v can be a scalar or length 1 array.
+ The routine put is the equivalent of the following (although the loop
+ is in C for speed):
+
+ ind = array(indices, copy=False)
+ v = array(values, copy=False).astype(a.dtype)
+ for i in ind: a.flat[i] = v[i]
+ a must be a contiguous numpy array.
+ """
+ return a.put(v,ind)
+
+def putmask (a, mask, v):
+ """putmask(a, mask, v) results in a = v for all places mask is true.
+ If v is shorter than mask it will be repeated as necessary.
+ In particular v can be a scalar or length 1 array.
+ """
+ return a.putmask(v, mask)
+
+def swapaxes(a, axis1, axis2):
+ """swapaxes(a, axis1, axis2) returns array a with axis1 and axis2
+ interchanged.
+ """
+ try:
+ swapaxes = a.swapaxes
+ except AttributeError:
+ return _wrapit(a, 'swapaxes', axis1, axis2)
+ return swapaxes(axis1, axis2)
+
+def transpose(a, axes=None):
+ """transpose(a, axes=None) returns a view of the array with
+ dimensions permuted according to axes. If axes is None
+ (default) returns array with dimensions reversed.
+ """
+ try:
+ transpose = a.transpose
+ except AttributeError:
+ return _wrapit(a, 'transpose', axes)
+ return transpose(axes)
+
+def sort(a, axis=-1):
+ """sort(a,axis=-1) returns array with elements sorted along given axis.
+ """
+ a = asanyarray(a).copy()
+ a.sort(axis)
+ return a
+
+def argsort(a, axis=-1):
+ """argsort(a,axis=-1) return the indices into a of the sorted array
+ along the given axis, so that take(a,result,axis) is the sorted array.
+ """
+ try:
+ argsort = a.argsort
+ except AttributeError:
+ return _wrapit(a, 'argsort', axis)
+ return argsort(axis)
+
+def argmax(a, axis=-1):
+ """argmax(a,axis=-1) returns the indices to the maximum value of the
+ 1-D arrays along the given axis.
+ """
+ try:
+ argmax = a.argmax
+ except AttributeError:
+ return _wrapit(a, 'argmax', axis)
+ return argmax(axis)
+
+def argmin(a, axis=-1):
+ """argmin(a,axis=-1) returns the indices to the minimum value of the
+ 1-D arrays along the given axis.
+ """
+ try:
+ argmin = a.argmin
+ except AttributeError:
+ return _wrapit(a, 'argmin', axis)
+ return argmin(axis)
+
+def searchsorted(a, v):
+ """searchsorted(a, v)
+ """
+ try:
+ searchsorted = a.searchsorted
+ except AttributeError:
+ return _wrapit(a, 'searchsorted', v)
+ return searchsorted(v)
+
+def resize(a, new_shape):
+ """resize(a,new_shape) returns a new array with the specified shape.
+ The original array's total size can be any size. It
+ fills the new array with repeated copies of a.
+
+ Note that a.resize(new_shape) will fill array with 0's
+ beyond current definition of a.
+ """
+
+ if isinstance(new_shape, (int, nt.integer)):
+ new_shape = (new_shape,)
+ a = ravel(a)
+ Na = len(a)
+ if not Na: return mu.zeros(new_shape, a.dtype.char)
+ total_size = um.multiply.reduce(new_shape)
+ n_copies = int(total_size / Na)
+ extra = total_size % Na
+
+ if total_size == 0:
+ return a[:0]
+
+ if extra != 0:
+ n_copies = n_copies+1
+ extra = Na-extra
+
+ a = concatenate( (a,)*n_copies)
+ if extra > 0:
+ a = a[:-extra]
+
+ return reshape(a, new_shape)
+
+def squeeze(a):
+ "Returns a with any ones from the shape of a removed"
+ try:
+ squeeze = a.squeeze
+ except AttributeError:
+ return _wrapit(a, 'squeeze')
+ return squeeze()
+
+def diagonal(a, offset=0, axis1=0, axis2=1):
+ """diagonal(a, offset=0, axis1=0, axis2=1) returns the given diagonals
+ defined by the last two dimensions of the array.
+ """
+ return asarray(a).diagonal(offset, axis1, axis2)
+
+def trace(a, offset=0, axis1=0, axis2=1, dtype=None):
+ """trace(a,offset=0, axis1=0, axis2=1) returns the sum along diagonals
+ (defined by the last two dimenions) of the array.
+ """
+ return asarray(a).trace(offset, axis1, axis2, dtype)
+
+# not deprecated --- always returns a 1-d array. Copy-if-necessary.
+def ravel(m,order='C'):
+ """ravel(m) returns a 1d array corresponding to all the elements of it's
+ argument. The new array is a view of m if possible, otherwise it is
+ a copy.
+ """
+ a = asarray(m)
+ return a.ravel(order)
+
+def nonzero(a):
+ """nonzero(a) returns the indices of the elements of a which are not zero,
+ a must be 1d
+ """
+ try:
+ nonzero = a.nonzero
+ except AttributeError:
+ res = _wrapit(a, 'nonzero')
+ else:
+ res = nonzero()
+
+ if len(res) == 1:
+ return res[0]
+ else:
+ raise ValueError, "Input argument must be 1d"
+
+
+def shape(a):
+ """shape(a) returns the shape of a (as a function call which
+ also works on nested sequences).
+ """
+ try:
+ result = a.shape
+ except AttributeError:
+ result = asarray(a).shape
+ return result
+
+def compress(condition, m, axis=-1):
+ """compress(condition, x, axis=-1) = those elements of x corresponding
+ to those elements of condition that are "true". condition must be the
+ same size as the given dimension of x."""
+ try:
+ compress = m.compress
+ except AttributeError:
+ return _wrapit(m, 'compress', condition, axis)
+ return compress(condition, axis)
+
+def clip(m, m_min, m_max):
+ """clip(m, m_min, m_max) = every entry in m that is less than m_min is
+ replaced by m_min, and every entry greater than m_max is replaced by
+ m_max.
+ """
+ try:
+ clip = m.clip
+ except AttributeError:
+ return _wrapit(m, 'clip', m_min, m_max)
+ return clip(m_min, m_max)
+
+def sum(x, axis=0, dtype=None):
+ """Sum the array over the given axis. The optional dtype argument
+ is the data type for intermediate calculations.
+
+ The default is to upcast (promote) smaller integer types to the
+ platform-dependent Int. For example, on 32-bit platforms:
+
+ x.dtype default sum() dtype
+ ---------------------------------------------------
+ bool, Int8, Int16, Int32 Int32
+
+ Examples:
+ >>> sum([0.5, 1.5])
+ 2.0
+ >>> sum([0.5, 1.5], dtype=Int32)
+ 1
+ >>> sum([[0, 1], [0, 5]])
+ array([0, 6])
+ >>> sum([[0, 1], [0, 5]], axis=1)
+ array([1, 5])
+ """
+ if isinstance(x, _gentype):
+ return _sum_(x)
+ try:
+ sum = x.sum
+ except AttributeError:
+ return _wrapit(x, 'sum', axis, dtype)
+ return sum(axis, dtype)
+
+def product (x, axis=0, dtype=None):
+ """Product of the array elements over the given axis."""
+ try:
+ prod = x.prod
+ except AttributeError:
+ return _wrapit(x, 'prod', axis, dtype)
+ return prod(axis, dtype)
+
+def sometrue (x, axis=0):
+ """Perform a logical_or over the given axis."""
+ try:
+ any = x.any
+ except AttributeError:
+ return _wrapit(x, 'any', axis)
+ return any(axis)
+
+def alltrue (x, axis=0):
+ """Perform a logical_and over the given axis."""
+ try:
+ all = x.all
+ except AttributeError:
+ return _wrapit(x, 'all', axis)
+ return all(axis)
+
+def any(x,axis=None):
+ """Return true if any elements of x are true:
+ """
+ try:
+ any = x.any
+ except AttributeError:
+ return _wrapit(x, 'any', axis)
+ return any(axis)
+
+def all(x,axis=None):
+ """Return true if all elements of x are true:
+ """
+ try:
+ all = x.all
+ except AttributeError:
+ return _wrapit(x, 'all', axis)
+ return all(axis)
+
+def cumsum (x, axis=0, dtype=None):
+ """Sum the array over the given axis."""
+ try:
+ cumsum = x.cumsum
+ except AttributeError:
+ return _wrapit(x, 'cumsum', axis, dtype)
+ return cumsum(axis, dtype)
+
+def cumproduct (x, axis=0, dtype=None):
+ """Sum the array over the given axis."""
+ try:
+ cumprod = x.cumprod
+ except AttributeError:
+ return _wrapit(x, 'cumprod', axis, dtype)
+ return cumprod(axis, dtype)
+
+def ptp(a, axis=0):
+ """Return maximum - minimum along the the given dimension
+ """
+ try:
+ ptp = a.ptp
+ except AttributeError:
+ return _wrapit(a, 'ptp', axis)
+ return ptp(axis)
+
+def amax(a, axis=0):
+ """Return the maximum of 'a' along dimension axis.
+ """
+ try:
+ max = a.max
+ except AttributeError:
+ return _wrapit(a, 'max', axis)
+ return max(axis)
+
+def amin(a, axis=0):
+ """Return the minimum of a along dimension axis.
+ """
+ try:
+ min = a.min
+ except AttributeError:
+ return _wrapit(a, 'min', axis)
+ return min(axis)
+
+def alen(a):
+ """Return the length of a Python object interpreted as an array
+ of at least 1 dimension.
+ """
+ try:
+ return len(a)
+ except TypeError:
+ return len(array(a,ndmin=1))
+
+def prod(a, axis=0, dtype=None):
+ """Return the product of the elements along the given axis
+ """
+ try:
+ prod = a.prod
+ except AttributeError:
+ return _wrapit(a, 'prod', axis, dtype)
+ return prod(axis, dtype)
+
+def cumprod(a, axis=0, dtype=None):
+ """Return the cumulative product of the elments along the given axis
+ """
+ try:
+ cumprod = a.cumprod
+ except AttributeError:
+ return _wrapit(a, 'cumprod', axis, dtype)
+ return cumprod(axis, dtype)
+
+def ndim(a):
+ try:
+ return a.ndim
+ except AttributeError:
+ return asarray(a).ndim
+
+def rank(a):
+ """Get the rank of sequence a (the number of dimensions, not a matrix rank)
+ The rank of a scalar is zero.
+ """
+ try:
+ return a.ndim
+ except AttributeError:
+ return asarray(a).ndim
+
+def size (a, axis=None):
+ "Get the number of elements in sequence a, or along a certain axis."
+ if axis is None:
+ try:
+ return a.size
+ except AttributeError:
+ return asarray(a).size
+ else:
+ try:
+ return a.shape[axis]
+ except AttributeError:
+ return asarray(a).shape[axis]
+
+def round_(a, decimals=0):
+ """Round 'a' to the given number of decimal places. Rounding
+ behaviour is equivalent to Python.
+
+ Return 'a' if the array is not floating point. Round both the real
+ and imaginary parts separately if the array is complex.
+ """
+ try:
+ round = a.round
+ except AttributeError:
+ return _wrapit(a, 'round', decimals)
+ return round(decimals)
+
+around = round_
+
+def mean(a, axis=0, dtype=None):
+ try:
+ mean = a.mean
+ except AttributeError:
+ return _wrapit(a, 'mean', axis, dtype)
+ return mean(axis, dtype)
+
+def std(a, axis=0, dtype=None):
+ try:
+ std = a.std
+ except AttributeError:
+ return _wrapit(a, 'std', axis, dtype)
+ return std(axis, dtype)
+
+def var(a, axis=0, dtype=None):
+ try:
+ var = a.var
+ except AttributeError:
+ return _wrapit(a, 'var', axis, dtype)
+ return var(axis, dtype)