Sympy - 将数字视为符号

2024-06-16 09:36:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我怎样才能把数字当作符号呢?你知道吗

例如,如果我用符号执行因子分解,我得到:

from sympy import factor
factor('a*c*d + a*c*e + a*c*f + b*c*d + b*c*e + b*c*f')
c*(a + b)*(d + e + f)

当我在表达式中使用数字时,我希望有相同的行为。 而不是

from sympy import factor
factor('2006*c*d + 2006*c*e + 2006*c*f + 2007*c*d + 2007*c*e + 2007*c*f')
4013*c*(d + e + f)

我想得到

from sympy import factor
factor('2006*c*d + 2006*c*e + 2006*c*f + 2007*c*d + 2007*c*e + 2007*c*f')
c*(2006 + 2007)*(d + e + f)

Tags: fromimport表达式符号数字因子sympyfactor
2条回答

符号骗术解救:将你的数字替换为具有数字所给出名称的符号。在您的情况下,您不必关注负面版本,因此以下内容很简单:

>>> s = '2006*c*d + 2006*c*e + 2006*c*f + 2007*c*d + 2007*c*e + 2007*c*f'
>>> eq = S(s, evaluate=False); eq
2006*c*d + 2007*c*d + 2006*c*e + 2007*c*e + 2006*c*f + 2007*c*f
>>> reps = dict([(i,Symbol(str(i))) for i in _.atoms(Integer)]); reps
{2006: 2006, 2007: 2007}
>>> factor(eq.subs(reps))
c*(2006 + 2007)*(d + e + f)

注意:evaluate=False用于防止类似的术语组合成4013*c*d + 4013*c*e + 4013*c*f。你知道吗

用唯一的符号替换每个常量。 计算结果表达式的因子。 用常量替换唯一符号。你知道吗

对于给定的情况,类似这样的情况:

simple = factor('const2006*c*d + const2006*c*e + const2006*c*f + const2007*c*d + const2007*c*e + const2007*c*f')
simple.replace("const", '')
print(simple)

这会给你想要的输出。您可以使用简单的regex或普通解析器来标识表达式中的数字标记,其中任何一个都包含在许多其他位置。你知道吗

相关问题 更多 >