lambdify';s至numpy最大值
我想创建一个sympy表达式,将lambdify的值转换为numpy.max()。我该怎么做?尝试: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(
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++代码,很难自动识别出由你的技巧生成的