Python 使用相同的符号生成多个SymPy表达式
我想用同一组符号创建多个(超过400个)SymPy表达式。表达式如下所示:Python 使用相同的符号生成多个SymPy表达式,python,sympy,Python,Sympy,我想用同一组符号创建多个(超过400个)SymPy表达式。表达式如下所示: z_1_8 = k1 + k2 + kuni + k4 + k7 z_2_9_0 = k2 + k8 + k1 + k6 z_3_1_10 = k3 + kbi + k2 + k7 名称“z_1_8”将从列表中生成,列表中的每个成员都包含命名每个表达式的数字。同样,这些符号也来自一个列表,其中每个成员都包含一个符号列表,作为要生成的每个表达式的字符串-'k1','k2'等 list_to_generate_expres
z_1_8 = k1 + k2 + kuni + k4 + k7
z_2_9_0 = k2 + k8 + k1 + k6
z_3_1_10 = k3 + kbi + k2 + k7
名称“z_1_8”将从列表中生成,列表中的每个成员都包含命名每个表达式的数字。同样,这些符号也来自一个列表,其中每个成员都包含一个符号列表,作为要生成的每个表达式的字符串-'k1'
,'k2'
等
list_to_generate_expression_names = [[1, 8], [2, 9, 0], [3, 1, 10],...]
list_to_generate_expressions = [['k1', 'k2','kuni','k4','k7'], ['k2', 'k8', 'k1', 'k6'], ['k3', 'kbi', 'k2', 'k7']]
有什么方法可以做到这一点呢?我在这里假设,
列表中要生成表达式的每个字符串都是已经存在的对象的名称。如果是这种情况,并且列表正确匹配,则可以执行以下操作:
names = ['z_' + '_'.join([str(n) for n in name_nums]) for name_nums in list_to_generate_expression_names]
exprs = ['+'.join(expr_items) for expr_items in list_to_generate_expressions]
for name, expr in zip(names,exprs):
exec('{0} = {1}'.format(name,expr))
请注意,这确实使用了exec
,应始终谨慎使用,但由于您使用的是自己的列表,因此非常安全。SymPy变量必须动态创建(使用var
函数),因此您可以对范围(10)内的i执行k=[var('k%d'%i)]
之类的操作。谢谢。我的符号不是严格意义上的k序列。我刚刚编辑了这个问题。通常使用symbols
比var
更好。是否要生成sympy.Eq
对象?我不确定这是什么意思。我对使用Symphy很陌生,对python也不是很有经验。非常感谢!这正是我想做的。除了使用exec,还有其他选择吗?只需了解选项是什么以及它在做什么?如果通过exec运行的所有内容都是安全的,那么就没有什么可担心的了。我认为在执行此操作之前,在“list_to_generate_expressions”中创建已存在对象的名称字符串,我会把它们称为象征?是的。如果你有一个字符串列表,你需要是symphy符号,你可以这样做:for i in my_list:exec({i}=Symbol({i}”).format(i=i))
而不是exec
,初始化dictz={}
应该允许在最后的循环中使用类似于z[name]=symphy.Eq(name,expr)
的东西。