Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SymPy:如何实现对几个“外观相似”术语的通用替换?

SymPy:如何实现对几个“外观相似”术语的通用替换?
EN

Stack Overflow用户
提问于 2021-02-12 16:14:06
回答 1查看 57关注 0票数 1

我已经搜索了很多问题,老实说,没有找到适用于我的情况的东西。

我正在使用SymPy库来执行大型计算,它工作得非常好。然而,我最近的结果变得太复杂了。因此,我开始实现更多的定义和符号,以便执行几次替换,并将表达式缩小到更可行的形式。我已经“手动”完成了很多术语,这些术语太特殊了,不允许任何类型的自动化。但是,如果我可以运行这个简单的替换规则,那么在我的表达式中有一个特定的贡献家族可以大大简化。

设A是我的完整表达式。在this image中,点表示已经简化的术语,求和表示查询背后的一般设置。我的目标是像this一样重写它。

T_k只是表示通用术语;实际上,它们由几个文字Symbols组成。在我的代码中,rho字母与单个变量Symbol-type关联。因此,我的问题可以举例如下:

代码语言:javascript
运行
AI代码解释
复制
# sympy symbols: rho, a, b, c, d
# sympy functions: f, g, h
A = (a * b) * f(rho) + (c * d) * g(rho) + (a * c * d * b) * h(rho)

# apply some clever substitution method ???
A.subs(???)
  >>> f(a * b) * rho + g(c * d) * rho + h(a * c * d * b) * rho

当然,在上面的例子中,我可以“手工”完成。当有很多这样的术语时,问题就出在这里。我试图使用lambda表达式来实现我的目标,但无法实现。想法是:对于任何通用的lambda t,我可以尝试为每个符号函数(# f, g, h)输入映射{t * f(rho) : f(t) * rho},而不关心特定的伴随术语。

例如,我尝试定义genSub_f = lambda t: A.subs(t * f(rho), f(t) * rho)。但是,为了进行替换,我必须调用genSub_f(a * b),这是有效的,但这是不可行的,因为必须保留与f(rho)一起使用的符号组合的先验知识。如何继续?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-12 18:35:30

您可以使用Wild符号来实现这一点,但是有几种方法可以获得您想要的输出。

一个复杂的问题是,您似乎不想应用替换f(a*b)*rho -> f(a*b*rho)。有几种方法可以实现这一点,但首先我将给出一个确实会导致此替换的答案:

代码语言:javascript
运行
AI代码解释
复制
from sympy import *
rho, a, b, c, d = symbols("rho, a, b, c, d")
f, g, h = symbols("f, g, h", cls=Function)
A = (a * b) * f(rho) + (c * d) * g(rho) + (a * c * d * b) * h(rho)

w1, w2 = symbols("w1, w2", cls=Wild)

for ff in [f, g, h]:
    A = A.replace(w1*ff(w2), w2*ff(w1))

print(A)  # f(a*b*rho) + g(c*d*rho) + h(a*b*c*d*rho)

那么排除替换rho*f(a*b) -> f(a*b*rho)又如何呢?

一种方法是从Wild匹配中排除rho,方法是像这样定义您的Wild符号w1 (我们还必须排除替换1*f(...) -> ...*f(1))。这将产生所需的输出:

代码语言:javascript
运行
AI代码解释
复制
A = (a * b) * f(rho) + (c * d) * g(rho) + (a * c * d * b) * h(rho)

w1 = Wild("w1", exclude=[rho, 1])  # exclude unwanted substitutions
w2 = Wild("w2")

for ff in [f, g, h]:
    A = A.replace(w1*ff(w2), w2*ff(w1))

print(A)  # rho*f(a*b) + rho*g(c*d) + rho*h(a*b*c*d)

但是,实现所需输出的另一种方法是使用match而不是replace。这样,您就不必显式地排除rho (使用这种方法,替换是手动完成的,因此无需担心避免替换规则的“双重”应用):

代码语言:javascript
运行
AI代码解释
复制
A = (a * b) * f(rho) + (c * d) * g(rho) + (a * c * d * b) * h(rho)

w1, w2, w3 = symbols("w1, w2, w3", cls=Wild)

for ff in [f, g, h]:
    m = A.match(w1*ff(w2) + w3)
    if m:
        A = m[w2]*ff(m[w1]) + m[w3]  # manual replacement

print(A)  # rho*f(a*b) + rho*g(c*d) + rho*h(a*b*c*d)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66175255

复制
相关文章
GPU加速04:将CUDA应用于金融领域,使用Python Numba加速B-S期权估值模型
本文为英伟达GPU计算加速系列的第四篇,主要基于前三篇文章的内容,以金融领域期权估值案例来进行实战练习。前三篇文章为:
PP鲁
2019/12/26
1.9K0
如何将 Transformer 应用于时间序列模型
在机器学习的广阔前景中,transformers 就像建筑奇迹一样高高耸立,以其复杂的设计和捕获复杂关系的能力重塑了我们处理和理解大量数据的方式。
数据科学工厂
2023/09/24
7830
如何将 Transformer 应用于时间序列模型
将MITRE ATT&CK模型应用于网络设备
信息安全社区经常忽视作为端点的网络设备。大多数人专注于保护系统和检测Windows域环境中的威胁,也包括检测运行MacOS和Linux系统的端点上的威胁。
FB客服
2019/12/10
9770
将MITRE ATT&CK模型应用于网络设备
将人类语言理解能力应用于药物发现中以提高活性预测模型的性能
来源:DrugAI本文约1200字,建议阅读5分钟今天为大家介绍的是来自Günter Klambauer团队的一篇分子活性预测的论文。 在药物发现和材料科学中,活性和性质预测模型是及其重要的工具,但目前采用的模型一般需要根据新需求在目标数据上进行训练或微调。语言模型可以通过零/少样本能力处理新的任务,但其活性预测的预测质量较差。为此,作者提出了一种新型活性预测模型,通过理解描述任务的文本信息,能够在推理时适应新的预测任务。 分子活性和分子性质预测模型是计算药物发现中的主要工具,类似于自然语言处理(NL
数据派THU
2023/04/25
4680
将人类语言理解能力应用于药物发现中以提高活性预测模型的性能
yiq颜色模型应用于_如果rgb色彩模式中
YIQ,是NTSC(National Television Standards Committee)电视系统标准。Y是提供黑白电视及彩色电视的亮度信号(Luminance),即亮度(Brightness),I代表In-phase,色彩从橙色到青色,Q代表Quadrature-phase,色彩从紫色到黄绿色。
全栈程序员站长
2022/11/01
5150
yiq颜色模型应用于_如果rgb色彩模式中
JavaScript将iframe中控件的值传到主页面控件中
主要是通过在主页面定义一个传输数据的函数GetData(data),然后在iframe嵌入页面中通过parent.GetData(data),这样即可在GetData实现将data进行处理即可。
aehyok
2018/09/11
2.5K0
JavaScript将iframe中控件的值传到主页面控件中
div嵌套盒子模型
标准盒模型尺寸的计算 盒子模型的实际宽度:width+左右padding+左右border 盒子模型的实际长度:width+上下padding+上下border
阮键
2020/05/08
1.2K0
如何使用Excel将某几列有值的标题显示到新列中
如果我们有好几列有内容,而我们希望在新列中将有内容的列的标题显示出来,那么我们怎么做呢?
繁华是客
2023/03/03
11.8K0
将Session值储存于SQL Server中
一般情况下,我们喜欢使用Session储存我们的变量。Asp.Net提供了下面一些方法储存Session的值: InProc
Java架构师必看
2021/03/22
8860
使用 Kustomize 帮你管理 kubernetes 应用(三):将 Kustomize 应用于 CI/CD
首先明确软件版本,我这里使用的是 Jenkinsver.2.121.3 ,这个版本比较老,其上安装 Kubernetes 插件所使用 kubectl 版本也比较老,无法使用 Kustomize 的 yaml 文件需要的 apiVersion:apps/v1 ,直接使用生成 deploy.yaml 文件会报错,所以这里选择了自己构建一个包含 kubectl 和 kustomize 的镜像,在镜像中使用 Kustomize 生成所需 yaml 文件并在 Kubernetes 上部署。
郭旭东
2020/12/30
1.5K0
使用 Kustomize 帮你管理 kubernetes 应用(三):将 Kustomize 应用于 CI/CD
使用React.Fragment替代render函数中div的包裹
1、在 React 中,render 函数中 return 的内容只能有一个根节点,如果多个元素嵌套,需要用一个标签元素包裹 这个包裹的标签通常用 div,示例如下: class App extend
Leophen
2019/08/23
2K0
使用React.Fragment替代render函数中div的包裹
AutoFac - 将 autofac 应用于MVC多层项目
  AutoFac是.NET平台下的一款著名的IoC Container,它可以让我们很轻松的解除项目中服务类的接口与客户类的接口实现类之间的依赖关系,从而降低系统各模块之间耦合程度以提高系统的稳定性。最近在做毕业设计,在开发中采用了autofac来进行依赖注入,这里是对踩到的一些坑的解决方法,希望可以给同样不幸进入这些坑中的童鞋们提供一些解决思路。
程序员宇说
2019/09/11
8760
AutoFac - 将 autofac 应用于MVC多层项目
Rest Notes-将REST应用于URI
摘要: 自1994年以来,REST架构风格就被用来指导现代Web架构的设计和开发,本篇描述了在创作超文本移交协议(HTTP)和统一资源标识符(URI)两个互联网规范的过程中,以及将这些技术部署在libwww-perl客户端库、Apache HTTP服务器项目、协议标准的其他实现的过程中,应用REST所学到的经验和教训 正文: 将REST应用于URI Web标准化 开发REST的动机是为Web的运转方式创建一种架构模式,使之成为Web协议标准的指导框架。REST被用来描述期待的Web架构,帮助识别出现有的问
itliusir
2018/06/13
5440
Rest Notes-将REST应用于HTTP
摘要: 超文本移交协议(HTTP)在Web架构中既作为在Web组件之间通信的主要的应用级协议,也作为特别为移交资源的表述而设计的唯一的协议(现在并不是唯一,还有COAP协议)。 正文: 将REST应用于HTTP 超文本移交协议(HTTP)在Web架构中既作为在Web组件之间通信的主要的应用级协议,也作为特别为移交资源的表述而设计的唯一的协议(现在并不是唯一,还有COAP协议)。 REST用来识别早期HTTP协议中的问题,并指定了一个可以和HTTP1.0互操作的协议子集,然后分析HTTP1.1的扩展提议,并
itliusir
2018/06/12
6780
html的table使用div创建
      午休时间写了一个使用div创建table的案例 1.样式 <style> .table { display: table; } .tableRow { display: table-row; } .tableRow div { display: table-cell; background: #EEE; border: 1px solid #
用户1055830
2018/01/18
2.9K0
html的table使用div创建
使用信号监控 Django 模型对象字段值的变化
Django 信号 (Signals) 的功能类似于 WordPress 的动作 (action),用于为项目全局增加事件的广播 (dispatch) 与接收 (receive) 机制。其中,灵活使用其内置的模型信号 (Model Signals) 的接收功能就可以监控大部分模型对象 (Model instances) 的变化。因为不需要修改模型本身的代码,在进行跨应用 (App) 监控时有低耦合的优势。
BigYoung小站
2020/05/05
1.9K0
【说站】mysql中null值的使用
以上就是mysql中null值的使用,希望对大家有所帮助。更多mysql学习指路:MySQL
很酷的站长
2022/11/24
2.2K0
【说站】mysql中null值的使用
评分模型的缺失值
构建评分模型过程中,建模属于流程性的过程,耗时不多,耗费大量精力的点在于缺失值的填充。缺失值填充的合理性直接决定了评分模型的成败。模型按照形式可划分为公式模型与算法模型,不同形式的模型对缺失值的宽容程度不同。
许卉
2019/07/15
1.9K0
评分模型的缺失值
将 useReducer 应用于 Web Worker,擦出奇妙的火花
有这么一个场景,当加载一个网页时,它突然变得无响应,直到所有的资源完全加载完毕才响应。但是,当资源加载时,用户可能无法执行页面上的某些功能,比如单击、选择或拖动元素。这个时候你可能会想到使用 Web workers帮助我们解决这个问题。
前端修罗场
2022/07/29
1.8K0
将 useReducer 应用于 Web Worker,擦出奇妙的火花
可应用于多种癌症的预测分子特征模型
Genetic determinants of the molecular portraits of epithelial cancers
作图丫
2022/03/29
5080
可应用于多种癌症的预测分子特征模型

相似问题

使用谷歌课堂的API将成绩发送到Power教师成绩册

24

谷歌课堂成绩册API代码var。字符串

10

谷歌课堂API

22

谷歌课堂成绩自动上传到谷歌工作表?

14

使用google课堂api将成绩返回给学生

114
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档