这是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))
答案 0 :(得分:0)
您可以使用OrderedDict
和zip
的组合将两个列表映射到有序的词典,它们以相同的顺序组合它们他们出现了。然后,解压缩构成函数调用的字典值的参数,如下所示:
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])
请注意,a
和b
仍然属于sympy.core.symbol.Symbol
类型,而不是str
,因此sorted
方法无法直接应用于字典键。