非交换的 symify(或简化)

2024-01-19

我希望能够简化 Python 中字符串的数学表达式。 有几种“可交换”的方法可以做到这一点。 是否有一个不可交换的函数?

我知道sympify from sympy可以做一些非交换工作,这里有一个例子:

from sympy import *
x=Symbol('x',commutative=False)
y=Symbol('y',commutative=False)

print sympify(3*x*y - y*x - 2*x*y)

它将打印 xy -yx,但是如果我们将 sympify 应用于字符串,即

print sympify('3*x*y - y*x - 2*x*y')

结果是0.

有没有办法简化上面的字符串以保持不可交换性x and y?

我发现这里已经有人问过了http://osdir.com/ml/python-sympy/2012-02/msg00250.html http://osdir.com/ml/python-sympy/2012-02/msg00250.html有人回答了http://osdir.com/ml/python-sympy/2012-02/msg00255.html http://osdir.com/ml/python-sympy/2012-02/msg00255.html,但是该解决方案似乎一般不起作用。

我更愿意先问,如果没有立即解决方案,我想我将不得不自己编写代码。


您仍然需要告诉 Sympy 符号 x 和 y 存在约束。为此,仍然创建Symbol它们的实例,然后将这些参数传递为locals to sympify:

In [120]: x = sympy.Symbol('x', commutative=False)

In [121]: y = sympy.Symbol('y', commutative=False)

In [122]: sympy.sympify('3*x*y - y*x - 2*x*y', locals={'x':x, 'y':y})
Out[122]: x*y - y*x

为了以编程方式完成此操作,SymPy 提供了一些很好的解析工具,用于从字符串表达式中提取符号。关键的想法是你必须抑制评价因为正常的评估会做出交换性假设,从而破坏您提取所需内容的能力:

In [155]: s = sympy.parsing.sympy_parser.parse_expr('3*x*y - y*x - 2*x*y', evaluate=False)

In [156]: s.atoms(sympy.Symbol)
Out[156]: {x, y}

似乎没有直接的方法来改变已经创建的假设状态Symbol,这是不幸的。但是您可以迭代这些符号,并创建具有相同名称和非交换假设的新符号集合,并将其用于locals in sympify.

def non_commutative_sympify(expr_string):
    parsed_expr = sympy.parsing.sympy_parser.parse_expr(
        expr_string, 
        evaluate=False
    )

    new_locals = {sym.name:sympy.Symbol(sym.name, commutative=False)
                  for sym in parsed_expr.atoms(sympy.Symbol)}

    return sympy.sympify(expr_string, locals=new_locals)

例如:

In [184]: non_commutative_sympify('3*x*y - y*x - 2*x*y')
Out[184]: x*y - y*x

In [185]: non_commutative_sympify('x*y*z - y*z*x - 2*x*y*z + z*y*x')
Out[185]: -x*y*z - y*z*x + z*y*x
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

非交换的 symify(或简化) 的相关文章

随机推荐

  • C# Treeview 移动节点后不刷新

    在我的 Windows 应用程序中 我有一个树视图 我制作了自定义按钮来向下移动节点 单击按钮时会发生以下情况 Node destNode tvCategories SelectedNode NextNode Node srcNode tv
  • 我需要帮助才能在同步模式下进行 FB.api() 调用

    我在 for 循环中运行 FB api 时遇到问题 for var i 0 i lt commentObjectLength i var fbFeedID commentObject OwnCommentList i fbFeedID va
  • 基于机架的 Web 服务器是否代表 FastCGI 协议?

    我读到 CGI FastCGI 是一种用于将外部应用程序连接到 Web 服务器的协议 因此 Web 服务器 如 Apache 或 NginX 通过套接字将环境信息和页面请求本身发送到 FastCGI 进程 并且 FastCGI 通过同一连接
  • ng-repeat 定义的次数而不是在数组上重复的方法?

    有没有办法ng repeat定义的次数而不是总是必须迭代数组 例如 下面我希望列表项显示 5 次 假设 scope number等于 5 并增加数字 因此每个列表项都会增加 1 2 3 4 5 期望的结果 ul li span 1 span
  • 从 Python 快速导入自定义 SPSS 命令

    我编写了一个简洁的 Python 模块 其中包含一些自定义 SPSS 函数供我的同事使用 但是 要使用该功能 他们首先需要输入 BEGIN PROGRAM 在实际调用函数之前导入模块等 因为他们中的大多数人并不精通技术 所以我希望让事情变得
  • TextBox.TextAlign右对齐在某些情况下没有效果?

    我的 Visual C Express 2010 表单应用程序中有一个路径选择器 我用的是FolderBrowserDialog和一个 单行 TextBox 显示所选路径 在我的 UI 刷新代码中使用以下行 this textBoxFold
  • 在 Flutter 中,Getx 包unknownRoute 不起作用

    我开始在 flutter 中学习 Getx 并使用导航 我想设置unknownRoute 以防命名路由中存在拼写错误等 因此应用程序应该转到默认页面 我确实喜欢这样 return GetMaterialApp title Named nav
  • 如何在 Scala 中获取 Ponter/Reference 语义

    在 C 中 我只需要一个指向 arr idx 的指针 或引用 在 Scala 中 我发现自己创建这个类来模拟指针语义 class SetTo val arr Array Double val idx Int def apply d Doub
  • git 过滤器不是“取消修改”文件

    我正在使用一个 IDE 它在一些已生成但强烈需要的库文件中生成一个版本 因此 如果我想使用具有多个版本的库 或者我看到大量实际上毫无意义的更改 就会出现问题 Summary 我想忽略一个single一个或多个文件的行 我认为 git 的过滤
  • 如何制作用于api调用的通用改造库

    我正在研究 API 集成 我想为 API 集成创建通用类 它可以适应所有 API 集成 现在我对所有 API 使用单独的代码 我是 Android 应用程序开发的新手 所以请指导我 public void getHomeCategoryDe
  • C++ 类型“char*”和“const char [2]”到二进制“operator+”的无效操作数

    当尝试执行以下简单代码时 编译器返回错误 类型 char 和 const char 2 到二进制 operator 的无效操作数 BodyText client PS3 ReadString 0x0178646c n 这是我的 ReadSt
  • 为什么我在 matplotlib 中的绘图不显示轴

    我的绘图遇到了麻烦 因为当我处理它时 轴标签似乎显示在 Jupyter Notebooks 中 但是 当我将文件导出到 py 文件并在终端中运行它时 给出的图表没有轴标签 fig plt figure figsize 15 5 ax fig
  • Kotlin 类转换异常

    我是 Android 开发新手 我在教程中看到了这段代码 class MainActivity AppCompatActivity private val newNumber by lazy LazyThreadSafetyMode NON
  • BCP 导入错误“强制转换规范的字符值无效”

    全部 我使用 BCP 进行导入导出 并在尝试导入回来时仅 1 导出的第一行 行出现 强制转换规范的字符值无效 错误 表结构 Col1 数字 19 0 第 2 列 NVARCHAR 400 Col3 NVARCHAR 400 我正在使用以下命
  • 在动画中切换位置属性上的 CABasicAnimation 会导致闪烁

    我有一些代码使用 CALayers 使气泡从下到上流动 如果用户触摸屏幕 我会编写一些代码 将当前正在运行的动画替换为具有手指触摸的 toPoint 的动画 当动画切换时 它会导致设备上 而不是模拟器上 闪烁 任何有关消除闪烁的提示将不胜感
  • 获取html文件的最后修改日期

    在导入到我的网络应用程序中时 如何找出 html 文件的最后修改日期 html 文件位于另一台服务器上 不同的用户可以进行更新 当我检索页面时 我希望能够看到它的上次更新时间 以便我可以在主页上标记更新日期 我 我假设您正在使用 HTTP
  • “定义”数组元素的计数

    给定以下数组 var arr undefined undefined 2 5 undefined undefined 我想得到元素的数量are定义 即 那些是not undefined 除了循环遍历数组之外 还有什么好的方法吗 在最近的浏览
  • 为 Mac 版 docker 指定 IP 地址

    我在用着Mac 版 Docker 测试版它远离聚光灯 有什么方法可以从控制台运行它或强制使用任何配置文件来指定 docker 主机的 IP 地址 现在它从 192 168 64 3 更改为 192 168 64 5 每次启动 docker
  • 模型视图控制器设计模式代码示例

    我正在研究模型 视图 控制器设计模式 并且从理论上理解了该模式背后的概念 但我想了解一下人们如何实际将其付诸实践 维基百科提到了 Wt Web 工具包 CppCMS 和其他一些使用该模式的标准实现 但是我对这些并不熟悉 我只是希望和 如果有
  • 非交换的 symify(或简化)

    我希望能够简化 Python 中字符串的数学表达式 有几种 可交换 的方法可以做到这一点 是否有一个不可交换的函数 我知道sympify from sympy可以做一些非交换工作 这里有一个例子 from sympy import x Sy