如何在SymPy中移除表达式的数值因子保留其余部分?
移除SymPy表达式中的所有数值因子
以下是两种简便实现方法,无需修改原有浮点数指数形式:
方法一:拆分系数后筛选符号因子
通过as_coeff_mul拆分表达式的系数与因子集合,过滤掉数值因子后重新组合:
from sympy import symbols x, m, y, z = symbols('x m y z') expr = 60378125*139**(13/16)*2143750**(1/8)*x**(9/4)*m**(1/4)/(15420489728*y**(1/4)*z**(3/4)) # 拆分系数与所有因子 _, factors = expr.as_coeff_mul() # 保留非数值因子 symbolic_part = 1 for f in factors: if not f.is_number: symbolic_part *= f expr2 = symbolic_part print(expr2)
运行后将得到目标表达式:x**(9/4)*m**(1/4)/(y**(1/4)*z**(3/4))
方法二:分离分子分母分别处理
针对分式结构,拆分分子分母后各自提取符号因子,再合并结果:
from sympy import symbols x, m, y, z = symbols('x m y z') expr = 60378125*139**(13/16)*2143750**(1/8)*x**(9/4)*m**(1/4)/(15420489728*y**(1/4)*z**(3/4)) # 分离分子和分母 num, den = expr.as_numer_denom() # 提取分子的符号因子 num_sym = 1 for f in num.as_coeff_mul()[1]: if not f.is_number: num_sym *= f # 提取分母的符号因子 den_sym = 1 for f in den.as_coeff_mul()[1]: if not f.is_number: den_sym *= f # 组合最终结果 expr2 = num_sym / den_sym print(expr2)
说明
- 代码中的
is_number会自动识别所有数值项(包括带浮点数指数的常数,如139**(13/16)),完全匹配你的需求。 - 无需替换原有浮点数指数,直接适配现有表达式结构。
内容的提问来源于stack exchange,提问作者sancho.s ReinstateMonicaCellio
相关产品推荐
相关产品推荐

