python - sympy:显示表达式中已替换的所有符号变量
问题描述
是否可以显示 sympy 表达式中涉及的所有符号变量?
以下是一些可能非常令人困惑的示例代码:
from sympy import *
from sympy.stats import Normal, sample, variance
sigma_eps = symbols('sigma_eps')
eps = Normal("eps", 0, sigma_eps)
sigma_any = eps + 1
sigma_1 = (eps+1).subs({sigma_eps:1})
sigma_10 = (eps+1).subs({sigma_eps:10})
如果您打印sigma_any, sigma_1
或sigma_10
它们看起来都一样。他们都会告诉你,他们的价值是eps + 1
。但实际上,这些值是完全不同的分布。
是否有可能揭示已经使用了哪些随机变量并且已经替换了一个表达式?
解决方案
一般规则(并非总是遵循)表达式的字符串形式应该是可复制和可粘贴的以重新创建对象。这种情况是一个例外,可以打开https://github.com/sympy/sympy/issues上的问题。
如果您检查 srepr 表格,您可以知道它们不一样:
>>> srepr(sigma_1)==srepr(sigma_10)
False
此外,free_symbols
不会显示您想要的内容,但是替换前后原子之间的差异将揭示已更改的内容:
>>> sigma_any.free_symbols
{eps}
>>> sigma_any.atoms()
{0, 1, eps, sigma_eps}
>>> sigma_1.atoms()
{0, 1, eps}
请注意,sigma_eps
最后一个输出中缺少。
推荐阅读
- sql - 未执行删除的 VB.NET SQL 查询
- php - Doctrine\DBAL\Schema\SchemaException:表 'users' 上没有名称为 'deleted_at' 的列
- android - 为什么只调用第一个活动的`onDestroy`,而不调用其他活动?
- c# - 如何在通用方法中提供类型以用于强制转换?
- git - 从 Yocto 中的 git 存储库获取特定目录
- php - 无法使用 php 连接到 MS SqlServer
- sublimetext3 - 颜色荧光笔包不适用于 Sublime Text 3
- python - 在其他系统上运行 Django Project
- reactjs - 在第一次加载 nextjs 时无法加载所有内容/图像
- javascript - 如何添加文本以使用 Javascript 扫描(现有)PDF