War*_*ser 46
如果您使用的是numpy版本1.13.0或更高版本,则可以使用numpy.heaviside:
In [61]: x
Out[61]: array([-2. , -1.5, -1. , -0.5, 0. , 0.5, 1. , 1.5, 2. ])
In [62]: np.heaviside(x, 0.5)
Out[62]: array([ 0. , 0. , 0. , 0. , 0.5, 1. , 1. , 1. , 1. ])
Run Code Online (Sandbox Code Playgroud)
对于numpy的旧版本,您可以将其实现为 0.5 * (numpy.sign(x) + 1)
In [65]: 0.5 * (numpy.sign(x) + 1)
Out[65]: array([ 0. , 0. , 0. , 0. , 0.5, 1. , 1. , 1. , 1. ])
Run Code Online (Sandbox Code Playgroud)
clw*_*ght 20
可能最简单的方法就是
def step(x):
return 1 * (x > 0)
Run Code Online (Sandbox Code Playgroud)
这适用于单个数字和numpy数组,返回整数,并且对于x = 0则为零step(0) => 0.5.在某些情况下,最后一个标准可能更好.
mun*_*unk 14
它是sympy的一部分,您可以安装它pip install sympy
来自文档:
class sympy.functions.special.delta_functions.Heaviside
Heaviside Piecewise function. Heaviside function has the following properties:
1) diff(Heaviside(x),x) = DiracDelta(x) ( 0, if x<0 )
2) Heaviside(x) = < [*] 1/2 if x==0 ( 1, if x>0 )
Run Code Online (Sandbox Code Playgroud)
你会像这样使用它:
In [1]: from sympy.functions.special.delta_functions import Heaviside
In [2]: Heaviside(1)
Out[2]: 1
In [3]: Heaviside(0)
Out[3]: 1/2
In [4]: Heaviside(-1)
Out[4]: 0
Run Code Online (Sandbox Code Playgroud)
你也可以写自己的:
heaviside = lambda x: 0.5 if x == 0 else 0 if x < 0 else 1
Run Code Online (Sandbox Code Playgroud)
如果您需要符号变量,则可能无法满足您的需求.
我不确定它是否开箱即用,但你总能写一个:
def heaviside(x):
if x == 0:
return 0.5
return 0 if x < 0 else 1
Run Code Online (Sandbox Code Playgroud)