flopscope.numpy.piecewise
fnp.piecewise(x, condlist, funclist, *args, **kw)[flopscope source][numpy source]
Evaluate a piecewise-defined function.
Adapted from NumPy docs np.piecewise
Piecewise function. Cost: numel(input).
Given a set of conditions and corresponding functions, evaluate each function on the input data wherever its condition is true.
Parameters
- x:ndarray or scalar
The input domain.
- condlist:list of bool arrays or bool scalars
Each boolean array corresponds to a function in
funclist. Wherevercondlist[i]is True,funclist[i](x)is used as the output value.Each boolean array in
condlistselects a piece ofx, and should therefore be of the same shape asx.The length of
condlistmust correspond to that offunclist. If one extra function is given, i.e. iflen(funclist) == len(condlist) + 1, then that extra function is the default value, used wherever all conditions are false.- funclist:list of callables, f(x,*args,**kw), or scalars
Each function is evaluated over
xwherever its corresponding condition is True. It should take a 1d array as input and give an 1d array or a scalar value as output. If, instead of a callable, a scalar is provided then a constant function (lambda x: scalar) is assumed.- args:tuple, optional
Any further arguments given to piecewise are passed to the functions upon execution, i.e., if called
piecewise(..., ..., 1, 'a'), then each function is called asf(x, 1, 'a').- kw:dict, optional
Keyword arguments used in calling piecewise are passed to the functions upon execution, i.e., if called
piecewise(..., ..., alpha=1), then each function is called asf(x, alpha=1).
Returns
- out:ndarray
The output is the same shape and type as x and is found by calling the functions in
funcliston the appropriate portions ofx, as defined by the boolean arrays incondlist. Portions not covered by any condition have a default value of 0.
See also
Notes
This is similar to choose or select, except that functions are
evaluated on elements of x that satisfy the corresponding condition from
condlist.
The result is:
|--
|funclist[0](x[condlist[0]])
out = |funclist[1](x[condlist[1]])
|...
|funclist[n2](x[condlist[n2]])
|--Examples
>>> import flopscope.numpy as fnpDefine the signum function, which is -1 for x < 0 and +1 for x >= 0.
>>> x = flops.linspace(-2.5, 2.5, 6)
>>> flops.piecewise(x, [x < 0, x >= 0], [-1, 1])
array([-1., -1., -1., 1., 1., 1.])Define the absolute value, which is -x for x <0 and x for
x >= 0.
>>> flops.piecewise(x, [x < 0, x >= 0], [lambda x: -x, lambda x: x])
array([2.5, 1.5, 0.5, 0.5, 1.5, 2.5])Apply the same function to a scalar value.
>>> y = -2
>>> flops.piecewise(y, [y < 0, y >= 0], [lambda x: -x, lambda x: x])
array(2)