同情的表达,lambdify的numpy最大

时间:2017-08-01 17:56:37

标签: numpy sympy

我想创建一个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到我想要的表达式。

1 个答案:

答案 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.]