You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:47:04