我想创建一个lambdify为numpy.maximum()的sympy表达式。我怎样才能做到这一点?尝试:
import numpy as np
import sympy
x = sympy.Symbol('x')
expr = sympy.Max(2, x)
f = sympy.lambdify(x, expr)
f(np.arange(5))
这导致:
ValueError: setting an array element with a sequence.
在sympy issue 11027中提出sympy.Maximum()
类似于np.maximum()
的提法,但从未实施过。
笨重的解决方法:
maximum = sympy.Function('maximum')
expr2 = maximum(2, x)
f2 = lambda c: sympy.lambdify((maximum, x), expr2)(np.maximum, c)
f2(np.arange(5))
但我真的更喜欢一个直接lambdify到我想要的表达式。
答案 0 :(得分:2)
两个数字x,y的最大值与(x+y+abs(x-y))/2
相同。而且abs
很容易贬低:
expr = (x + 2 + sympy.Abs(x-2))/2
f = sympy.lambdify(x, expr)
f(np.arange(5)) # prints [ 2. 2. 2. 3. 4.]