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

如何在SymPy中解析含数组的表达式并完成代入求值?

SymPy数组表达式处理方案

问题根因

  • 下标访问报错是因为默认解析器会把x识别为普通Symbol对象,原生不支持索引操作
  • sum(x)不计算是因为解析器默认调用SymPy惰性求值的Sum对象,subs仅做符号替换,不会自动触发求和计算

具体实现方案

1. 支持x[0]+x[1]类下标表达式

使用IndexedBase定义可索引的符号数组,提前注入到解析器的命名空间中:

from sympy import IndexedBase
from sympy.parsing.sympy_parser import parse_expr

# 提前声明x为可索引类型,注入解析命名空间
local_ns = {"x": IndexedBase("x")}
expr = parse_expr("x[0] + x[1]", local_dict=local_ns)

# 代入求值时生成索引-值的映射字典
x_val = [1, 2, 3]
sub_map = {local_ns["x"][i]: x_val[i] for i in range(len(x_val))}
res = expr.subs(sub_map)
print(res) # 输出3

2. 支持sum(x)类求和表达式

解析时将sum绑定为Python原生求和函数,替换后会自动对传入的列表计算总和:

from sympy.parsing.sympy_parser import parse_expr

# 注入sum为Python内置函数
local_ns = {"sum": sum}
expr = parse_expr("sum(x)", local_dict=local_ns)

res = expr.subs({"x": [1, 2, 3]})
print(res) # 输出6

补充说明

如果需要使用SymPy原生的符号求和能力,解析后得到的Sum对象调用.doit()方法即可触发计算。


内容的提问来源于stack exchange,提问作者Dax Fohl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:39:03