lambdify';s至numpy最大值

lambdify';s至numpy最大值,numpy,sympy,Numpy,Sympy,我想创建一个sympy表达式,将lambdify的值转换为numpy.max()。我该怎么做?尝试: 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.Maximum(

我想创建一个sympy表达式,将lambdify的值转换为numpy.max()。我该怎么做?尝试:

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.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的表达式,而不是我想要的表达式。

两个数字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.]

您是否在
lambdify
调用中尝试了
numpy
参数@hpaulj我如何告诉
symphy
symphy.Max
np.Max
匹配?因此,仔细查看错误消息,似乎
symphy.Max
会转换为
numpy.amax
np。另一方面,maximum
是一个
ufunc
,设计用于处理2个数组。是的,我提供的链接提供了一些详细信息。您给出的示例更像是一个数组,因为数组与标量进行比较。这就是目标吗?事实上,这毕竟不太管用。我最终需要将ExPR转换成优化的C++代码,很难自动识别出由你的技巧生成的 Sux.EXPR可以转换成C++ <代码> Max()/Cudio>调用。那么我不知道为什么你会问<代码> lambdiyy,因为它是一个有表情的表达式,而不是λ。对于C++代码生成,我建议提出一个新的问题。我需要两个不同的目的:Sypy表达式:在Python上对NUMPY数组进行评估,并且通过遍历表达式树将其转换为自定义C++代码。