我可以用符号代替表达式吗?

时间:2019-12-30 06:40:14

标签: python sympy

我想象征性地检查S型函数的导数是通过使用S型函数表示的。我在下面编写了旨在将Expression替换为Symbol的代码,但是输出结果不是我期望的。如何正确进行替换?

import sympy

# define sigmoid functions
x = sympy.Symbol('x')
sigmoid = lambda x: 1/(1 + sympy.exp(-x))
sigmoid_deriv = sigmoid(x).diff(x)

# define symbol X
X = sympy.Symbol('X')

print(sigmoid_deriv.subs({sigmoid: X}))

输出:

exp(-x)/(1 + exp(-x))**2

所需的输出:

X*(1 - X)

1 个答案:

答案 0 :(得分:1)

感谢@ComplicatedPhenomenon,它解决了。这是代码。

import sympy

# define sigmoid functions
x = sympy.Symbol('x')
sigmoid = 1/(1 + sympy.exp(-x))
sigmoid_deriv = sigmoid.diff(x)

# define symbol X
X = sympy.Symbol('X')

# solve inverse sigmoid function
eq = sympy.Eq(sigmoid, X)
x_lst = sympy.solve(eq, x)

# unpack result
x2 = x_lst[0]

# substitute x as x2
sigmoid_deriv2 = sigmoid_deriv.subs({x: x2})

# simplify `sigmoid_deriv2`
sigmoid_deriv3 = sympy.simplify(sigmoid_deriv2)

# print simplified sigmoid_deriv
print(sigmoid_deriv3)

输出:

X*(1 - X)

谢谢。