首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >渐近表达式numpy数组中某些符号的数值计算

渐近表达式numpy数组中某些符号的数值计算
EN

Stack Overflow用户
提问于 2017-06-27 03:47:29
回答 2查看 4.2K关注 0票数 4

问题

我正在处理一个任意的MxN数值矩阵,其中每个元素都是一个渐近表达式,可能具有不同的符号。出于可视化的目的,让我们使用以下矩阵test

代码语言:javascript
复制
import sympy as sp
import numpy as np

a,b,c=sp.symbols('a b c');
test=np.array([[a**2,a+b],[a*c+b,b/c]]);

运行时,test将如下所示:

代码语言:javascript
复制
In [25]: test
Out[25]: 
array([[a**2, a + b],
       [a*c + b, b/c]], dtype=object)

我希望能够将这个数组中的一个变量替换为一个数字,并返回一个新的数组,该数组的维数与test相同,但已将指定的变量替换为它的新值。例如,如果我想用2替换b,新数组应该如下所示:

代码语言:javascript
复制
array([[a**2, a + 2],
       [a*c + 2, 2/c]], dtype=object)

尝试解决方案

我首先尝试使用渐近函数subs,但收到以下错误:

代码语言:javascript
复制
test.subs({b:2})
Traceback (most recent call last):

  File "<ipython-input-29-a9a04d63af37>", line 1, in <module>
    test.subs({b:2})

AttributeError: 'numpy.ndarray' object has no attribute 'subs'

我考虑过使用lambdify,但我认为它返回的是一个数值lambda表达式,这不是我想要的。我需要一个新的符号表达式,一个不再依赖于b的表达式。我在Wolfram Mathematica文档的模式匹配下找到了一些文献,这似乎就是我需要的http://www.wolfram.com/language/fast-introduction-for-programmers/en/patterns/,但我不知道如何在Python语言中实现它,或者是否可以这样做。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-27 07:01:21

只需使用sympy即可。不需要numpy,至少不需要替换:

代码语言:javascript
复制
In [117]: import sympy
In [118]: a,b,c=sympy.symbols('a b c')

In [120]: M=sympy.Matrix([[a**2, a+b],[a*c+b, b/c]])
In [121]: M
Out[121]: 
Matrix([
[   a**2, a + b],
[a*c + b,   b/c]])

In [123]: M.subs({b:2})
Out[123]: 
Matrix([
[   a**2, a + 2],
[a*c + 2,   2/c]])
票数 5
EN

Stack Overflow用户

发布于 2017-06-27 04:06:17

数组不是表达式,因此它没有方法subs

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44767566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档