gpt4 book ai didi

Python - 从字典动态创建方程

转载 作者:行者123 更新时间:2023-12-01 01:23:42 25 4
gpt4 key购买 nike

我根据从数据库获取的符合特定条件的值创建一个字典。因此我事先不知道字典中元素的数量和值。

例如,我得到这样的信息:

ditc1 = {"P01":{"F1":0.4,"P02":0.6}, "P02":{"F2":0.3, "P03":0.7}, "P03":{ “F3”:0.2,“P02”:0.8}}

我想做的是从这些元素动态创建数学方程,如下所示:...

P01 = 0.4*F1 + 0.6*P02

P02 = 0.3*F2 + 0.7*P03

P03 = 0.2*F3 + 0.8*P02

我需要方程之间的引用保持相同(例如,第一个方程中的 P02 是第二个方程中的 P02),这样我就可以根据 P0X 元素求解这些方程。

有办法做到这一点吗?

最佳答案

您不必担心为变量重新创建 Symbol 对象。 SymPy 将为您创建单个对象,每次调用Symbol('P01')时都会返回相同的单个对象:

>>> from sympy import Symbol
>>> p = Symbol('P01')
>>> p
P01
>>> p is Symbol('P01')
True

因此,只需将您的结构直接转换为 SymPy 对象,SymPy 就会知道 P02P02 = ... 等式表达式和 中是相同的符号>0.6*P02 乘法。

因为嵌套字典中可能可以有任意数量的元素,所以您可以使用 sympy.Add() 来从任意数量的组件构建添加。我假设您也想在方程中记录 = 符号,因此使用 sympy.Eq()为此:

from sympy import Symbol, Add, Eq

expressions = []
for p, equation_components in ditc1.items():
p = Symbol(p)
expression = []
for name, multiplier in equation_components.items():
expression.append(Symbol(name) * multiplier)
expressions.append(Eq(p, Add(*expression)))

这会产生

>>> from sympy import pprint
>>> for expr in expressions:
... pprint(expr)
...
P₀₁ = 0.4⋅F₁ + 0.6⋅P₀₂
P₀₂ = 0.3⋅F₂ + 0.7⋅P₀₃
P₀₃ = 0.2⋅F₃ + 0.8⋅P₀₂

如果你想玩这个here is a SymPy Live version .

关于Python - 从字典动态创建方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53538890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com