- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
考虑 python/sympy 中的以下表达式:
from sympy.abc import x, y
expression = 3*x**2*y**1 + x**2*y**3
现在我想通过使用模式匹配将 x**n*y**m
替换为 max(n,m)
:
from sympy import Wild
n = Wild('n')
m = Wild('m')
expression = expression.replace(x**n*y**m,max(n,m))
但是,我得到一个TypeError
:
Traceback (most recent call last):
File "wild.py", line 15, in <module>
expression = expression.replace(x**n*y**m,max(n,m))
File "/usr/lib/python3/dist-packages/sympy/core/relational.py", line 103, in __nonzero__
raise TypeError("cannot determine truth value of\n%s" % self)
TypeError: cannot determine truth value of
m_ > n_
问题显然是,在匹配表达式时,sympy 在将其转发给 max
函数之前不会将 Wild 符号的值转换为匹配值。有什么方法可以使它起作用吗?
请注意,这是我遇到的更普遍问题的一个简单示例,因此不能很好概括的变通方法不是很有帮助。我特别希望有一个使用表达式匹配的解决方案。
更新:按照sandwich的建议,将max(n,m)
替换为(m+n+abs(m-n))/2
有效,但是,我在实际程序中使用的功能要复杂得多。关于 sandwich 提到的 replace
从表达式树底部开始执行替换的问题:如果我使用 exact=True
并定义 f = sympy.Function( 'f')
然后下面的工作(除了我必须单独处理一些情况):
expression = expression.replace(x**n*y**m,f(n,m),exact=True)
但是,它仍然不适用于 max(n,m)
。
最佳答案
<罢工> max
是内置的 Python 函数,它会尝试立即求值,因此会出现错误(当它们是符号时,它无法确定 n
和 m
中的哪一个更大)。您可能需要 SymPy Max
功能,象征性地工作。 my_func
您在答案中定义的实际上是 Max
的基本实现.
In [14]: expression = expression.replace(x**n*y**m, Max(n,m))
In [15]: expression
Out[15]: 4
<罢工>
这似乎不起作用(答案 4 是错误的)。问题是它匹配 x**2
作为x**2*y**0
.由于替换函数的数学值取决于表达式的形式,这是有问题的,因为 SymPy 试图变得聪明。你实际上可以制作n
和 m
0 与 Wild('n', exclude=[x, 0])
不匹配, 但随之而来的问题是它与 x**2*y
不匹配作为x**2*y**1
.
所以我建议将您的表达式转换为多项式并准确地进行替换。希望这可以很好地概括您实际正在做的事情
In [18]: Poly(expression, x, y)
Out[18]: Poly(x**2*y**3 + 3*x**2*y, x, y, domain='ZZ')
In [19]: Poly(expression, x, y).terms()
Out[19]: [((2, 3), 1), ((2, 1), 3)]
In [20]: sum(max(pows)*coeff for pows, coeff in Poly(expression, x, y).terms())
Out[20]: 9
关于python - sympy:使用 Wild 符号作为函数的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37516481/
在 2005 年 Wild FJ在 Torgersen 等人的论文中,第 2 节和第 3 节的第一段使用术语“类型参数”。然后3.1节第一句介绍了“类型变量”这个词。考虑到讨论它的上下文以及谷歌上缺乏
我在这个网站上的第一个问题! ;-) 我尝试远程访问我的 Wildfly 9(独立模式)管理控制台,但没有成功。它在安装了 Wildfly 但没有远程访问的 Windows 服务器上本地运行良好。 防
我的 MySQL 数据库中有一条记录,例如 varchar 类型 john;john;john;jack;jack;steve;steve 我正在运行查询来获取此记录,假设列名称为NAME,表名称为
我一直在使用 Python 为我的研究进行计算。为了清理我糟糕的代码,我一直在阅读 Code Like a Pythonista: Idiomatic Python大卫古杰着。 在本文中,Goodge
这个问题与其说是寻找解决方案,不如说是获得对我在 SQL Server 中见过的怪异行为的解释。 我有一个具有以下签名的存储过程: alter procedure MySP @param1 uniqu
我正在 CentOS 7 上创建 MySQL 主从复制,下面是两台服务器的配置文件详细信息: 主服务器的my.cnf [mysqld] server-id=1 log-bin=mysql-bin da
我最近刚刚修复了一些代码中的错误,希望有人能向我解释错误发生的原因。 我有这样的查询: SELECT * FROM my_table WHERE my_field=13 出乎意料的是,这会返回 my_
我想在 stateless EJB 方法中进行一些文件操作(复制)。我知道不建议这样做。但对于一些特殊的 EJB 实现来说,这是可能的。 Wildfly 最好的东西是什么? 编辑 一些令人不安的旧链接
考虑 python/sympy 中的以下表达式: from sympy.abc import x, y expression = 3*x**2*y**1 + x**2*y**3 现在我想通过使用模式匹
我正在尝试进行通用子表达式替换。 我想将 x*y 形式的任何表达式完全替换为 c。 请注意,x 和y 可以是表达式中的任何符号。 在下面的代码中,我使用 Wild 来实现这一点,但显然我无法只使用 W
谁能告诉我,野指针在C中的含义,如何获得它,在C++中是否可用? 最佳答案 该标准没有定义或使用术语“野生”。我会小心地“纠正”其他人对它的含义的看法,而且我会特别避免引用随机的非规范互联网垃圾来支持
我需要运行一个脚本,该脚本将在我的团队成员创建新存储库时生成 projects.list 文件。 我们开发从“master”分支出来的固件,但分支永远不会 merge 回 master。由于永远不会
我正在尝试结合使用 quanteda 和 caret 包来根据训练样本对文本进行分类。作为测试运行,我想将 quanteda 的内置朴素贝叶斯分类器与 caret 中的分类器进行比较。但是,我似乎无法
我不明白为什么在以下使用 grep 的示例中对通配符 * 的解释不同: find . -type f -name \* 结果: ./tgt/etc/test_file.c ./tgt/etc/spel
如果不使用 API 可能是不可能的,但我还是要问,因为它可以让我省去很多痛苦和眼泪。 有没有办法在不使用 API 的情况下为 googlemaps 标记提供 z-index?我已经在我的设备上安装了名
我正在设计一个与 MongoDB 交互的 API。 现在的问题是,使用原始 ObjectID 来查询对象等是否安全。直接使用 OID 时(例如在查询中)是否会出现任何安全问题,或者我应该加密/在它们离
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我已经搜索了这个问题的解决方案 2 天,现在必须在这里提问:-( 我的问题: 我创建了新的自定义 Java 类: package my.app.test; class Test extends Obj
我的代码片段: - (void)viewDidUnload{ [super viewDidUnload]; self.statusView = nil; self.tableV
我想学习 OpenGL,并决定从一个非常简单的示例开始 - 根据 Stardust 航天器的测量结果推断出 cometd Wild 2 的形状(有关数据的详细信息:http://nssdc.gsfc.
我是一名优秀的程序员,十分优秀!