如何解决Sympy IndexedBase 替换
我对如何在 Sympy 中使用 here 感到有些困惑。假设我有以下设置:
from sympy import *
x = IndexedBase('x')
i = Idx('i')
s = Sum(x[i],(i,5))
s
输出:
5
___
╲
╲
╱ x[i]
╱
‾‾‾
i = 0
当然等于
x[0] + x[1] + x[2] + x[3] + x[4] + x[5]
通过执行s.doit()
。现在,我如何用某个范围替换 x
?我希望以下内容有效:
s.subs(x,list(range(6)))
但它似乎没有做任何事情。但是 s.doit().subs(x[0],0)
有效,但它只会替换 1 个元素。不是打算用一些列表替换 IndexedBase
吗?
解决方法
您可以按照您的建议为每个 subs
、x[0]
等多次调用 x[1]
。您可以像这样调用 subs
来完成此操作:
from sympy import *
x = IndexedBase('x')
expr = x[0] + x[1] + x[2] + x[3] + x[4] + x[5]
r = expr.subs({x[j]: j for j in range(6)})
print(r) # 15
您也可以使用 replace
来避免创建显式替换字典,例如:
r = expr.replace(Indexed,lambda b,i: i if b == x and i in range(6) else None)
或
w = Wild("w")
r = expr.replace(x[w],lambda w: w if w in range(6) else None)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。