Это немного сложно, потому что вы говорите «все числа», но игнорируете показатели. В вашем примере вы заменяете только числовые множители в термине новыми символами. Чтобы сделать это (и помочь вам найти возможное решение), попробуйте использовать replace
, сообщив, что вы ищете Мул, а затем сообщив, что вы хотите делать с Мулом, когда у вас есть:
from sympy import *
from sympy.abc import x,y
eq=2*x**2+7*cos(8*y)+2*pi
def nfact2dum(m):
assert m.is_Mul
nonnum = sift(m.args, lambda i:i.is_number, binary=True)[1]
return Mul(*([Dummy()] + nonnum))
deq = eq.replace(
lambda x:x.is_Mul,
lambda x: nfact2dum(x))
print(
deq.subs(list(zip(deq.atoms(Dummy),numbered_symbols('c')))))
output: c0*x**2 + c2*cos(c1*y) + c3