使用相同符号生成多个SymPy表达式

2 投票
1 回答
1165 浏览
提问于 2025-04-18 05:15

我想用同一组符号创建很多(超过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_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']]

那么,有什么方法可以做到这一点呢?

1 个回答

1

我假设你在 list_to_generate_expressions 里的每个字符串都是已经存在的对象的名字。如果是这样,并且你的列表对应得很好,你可以这样做:

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,这个东西使用时要小心。不过因为你用的是自己的列表,所以这样用是完全安全的。

撰写回答