应用lamdbdify时无法确定Relational的真值

时间:2017-03-05 14:59:26

标签: python sympy

这是here的延续。

我有这段代码:

import sympy
import numpy as np
from sympy.utilities.lambdify import lambdify

arr = [np.array([ 1, 2,3 ,4]), np.array([ 5, 6, 7, 8])]
a,b = sympy.symbols('a b')
var = [a,b]
expr = 'a+b'
new_dict = dict(zip(var, arr))
print(new_dict)

给了我:

{a: array([1, 2, 3, 4]), b: array([5, 6, 7, 8])}

然后,我使用lambdify:

f = lambdify( var, expr, 'numpy')

如果我尝试申请f

print(f([v for _,v in sorted(new_dict.items())]))

我收到了:

TypeError: cannot determine truth value of Relational

根据前一个问题的评论,我必须使用default_key,但我不确定如何正确使用它。

如果我尝试这样的话:

n = sorted(new_dict.keys(),  key=sympy.default_sort_key)

for k,v in zip(n,new_dict.values()):
    print(f(v))

我收到了:

<lambda>() missing 1 required positional argument: '_Dummy_21'

当我致电print(f(v))

1 个答案:

答案 0 :(得分:0)

您可以使用OrderedDictzip的组合将两个列表映射到有序的词典,它们以相同的顺序组合它们他们出现了。然后,解压缩构成函数调用的字典值的参数,如下所示:

import sympy
from sympy import sympify
import numpy as np
from sympy.utilities.lambdify import lambdify
from collections import OrderedDict


arr = [np.array([1,2,3,4]), np.array([5,6,7,8])]
a,b = sympy.symbols('a b')
var = [a,b]
expr = a+b                  # Alternatively, use sympify to convert the expression 
                            # that can be understood by Sympy, expr = sympify("a+b") 
f = lambdify(var, expr, "numpy")
vals = OrderedDict(zip(var, arr)).values()
f(*vals)
#array([ 6,  8, 10, 12])

请注意,ab仍然属于sympy.core.symbol.Symbol类型,而不是str,因此sorted方法无法直接应用于字典键。