如何在python中表达以下分段函数?

时间:2017-10-27 11:16:53

标签: python python-3.x numpy machine-learning

如何使用numpy实现以下分段函数及其衍生物?:

enter image description here

我试图:

def func(n):
    return beta * ((0 < n) * n + (n <= 0) * (k * np.exp(n) - alpha))

及其衍生物(反向传播):

def func_prime(n)
    return (n <= 0) * np.multiply(beta ,k, np.exp(n)) + (beta)

然而它不起作用。因此,如何用numpy实现上述函数(注意n是一个数组)。

2 个答案:

答案 0 :(得分:1)

您的目标可能需要numpy.where。 还要记住,numpy数组可以直接用于向量操作(大多数时候)。

以下示例代码:

In [1]: import numpy as np

In [2]: n = np.random.random(10)-0.5

In [3]: n
Out[3]:
array([ 0.15714377, -0.30756307,  0.02925383, -0.05156817, -0.32182295,
       -0.32772489,  0.15692736, -0.24274195, -0.19055825,  0.25264444])

In [4]: beta=1.0

In [5]: K=2.0

In [6]: np.where(n<=0, beta*K*(np.exp(n)-1), beta*n)
Out[6]:
array([ 0.15714377, -0.52952701,  0.02925383, -0.10052219, -0.55034698,
       -0.55887755,  0.15692736, -0.43105215, -0.34700477,  0.25264444])

In [7]:

来自numpy.where manual

  

numpy.where(条件[,x,y])

     

根据条件从x或y返回元素。

答案 1 :(得分:1)

要计算函数及其派生,您可以按照以下步骤进行:

fun = np.where(n<=0, beta*K*(np.exp(n)-1), beta*n)
derivativ = np.where(n<=0, beta*K*(np.exp(n)), beta)

你也可以使用scipy.misc.derivative。https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.misc.derivative.html