如何使用numpy实现以下分段函数及其衍生物?:
我试图:
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是一个数组)。
答案 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