numpy.piecewise#

numpy.piecewise(x, condlist, funclist, *args, **kw)[source]#

评估分段定义的函数。

给定一组条件和相应的函数,在输入数据的条件为真时评估每个函数。

参数:
xndarray 或标量

输入域。

condlist布尔数组或布尔标量的列表

每个布尔数组对应于funclist中的一个函数。在condlist[i]为 True 的地方,funclist[i](x) 用作输出值。

condlist中的每个布尔数组选择x的一部分,因此应该与x的形状相同。

condlist的长度必须与funclist的长度对应。如果给定一个额外的函数,即如果len(funclist) == len(condlist) + 1,则该额外函数为默认值,在所有条件都为假时使用。

funclist可调用对象的列表,f(x,*args,**kw),或标量

在相应的条件为 True 的地方,每个函数都在x上进行评估。它应该接受一个一维数组作为输入,并输出一个一维数组或标量值。如果提供标量而不是可调用对象,则假定为常数函数(lambda x: scalar)。

args元组,可选

传递给piecewise的任何其他参数都将传递给执行时的函数,例如,如果调用piecewise(..., ..., 1, 'a'),则每个函数都将调用为f(x, 1, 'a')

kw字典,可选

在调用piecewise时使用的关键字参数将传递给执行时的函数,例如,如果调用piecewise(..., ..., alpha=1),则每个函数都将调用为f(x, alpha=1)

返回:
outndarray

输出与 x 的形状和类型相同,通过在x的适当部分上调用funclist中的函数来找到,如condlist中的布尔数组所定义。任何条件都不覆盖的部分的默认值为 0。

参见

chooseselectwhere

备注

这类似于 choose 或 select,不同之处在于函数是在满足condlist中相应条件的x元素上进行评估的。

结果是

      |--
      |funclist[0](x[condlist[0]])
out = |funclist[1](x[condlist[1]])
      |...
      |funclist[n2](x[condlist[n2]])
      |--

示例

>>> import numpy as np

定义符号函数,对于x < 0为 -1,对于x >= 0为 +1。

>>> x = np.linspace(-2.5, 2.5, 6)
>>> np.piecewise(x, [x < 0, x >= 0], [-1, 1])
array([-1., -1., -1.,  1.,  1.,  1.])

定义绝对值,对于x <0-x,对于x >= 0x

>>> np.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])

将相同的函数应用于标量值。

>>> y = -2
>>> np.piecewise(y, [y < 0, y >= 0], [lambda x: -x, lambda x: x])
array(2)