首页 > 解决方案 > 我可以用符号代替表达式吗?

问题描述

我想象征性地检查 sigmoid 函数的导数是通过使用它的 sigmoid 函数来表达的。我写了下面的代码,打算将表达式替换为符号,但输出不是我所期望的。如何正确地进行这种替换?

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)

标签: pythonsympy

解决方案


感谢@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)

谢谢。


推荐阅读