【问题标题】:How to substitute symbol for matrix using symPy and numPy如何使用 symPy 和 numPy 替换矩阵的符号
【发布时间】:2013-05-30 02:05:20
【问题描述】:

我试图用我的方程式中的两个符号来代替它们每个的矩阵形式。

我创建了一个形成我的表达式的换向器函数:

t, vS, = sy.symbols('t, vS', commutative = False)
hS = t + vS

eta = myComm(t,hS)

dHs = myComm(eta,hS) 
print dHs.expand()

产生我想要的正确表达:

2*t*vS*t + t*vS**2 - t**2*vS - 2*vS*t*vS - vS*t**2 + vS**2*t

所以现在我希望用矩阵替换符号 t 和 vS,但是在使用 subs 时出现错误,“unhashable type: 'list'”我认为这与我对矩阵的初始化或它们应该如何初始化有关被适当地替换,因为我对 numPy 和 symPy 都是新手。

其余代码:

tRel = ([e0, 0],[0,e1])
vtmp = ([v0, v1],[v2,v3])

dHs = dHs.subs(t, tRel)
dHs = dHs.subs(vS, vtmp)
print dHs

【问题讨论】:

  • 尝试使用MatrixSymbol

标签: python numpy enthought sympy


【解决方案1】:

也许用lambdify:

import sympy as sy
import numpy as np    
from sympy.abc import x, y

z = ((x+y)**2).expand()
print(z)
# x**2 + 2*x*y + y**2
X = np.arange(6).reshape(2,3)
Y = np.arange(1,7).reshape(2,3)    

f = sy.lambdify((x, y), z, 'numpy')
print(f(X, Y))
# [[  1   9  25]
#  [ 49  81 121]]

assert np.allclose(f(X, Y), (X**2 + 2*X*Y + Y**2))

【讨论】:

  • 这对数值矩阵非常有效!谢谢!知道如何实现相同的目标,但(参考上面的代码)X 和 Y 由符号而不是数字元素组成?
  • 为此,请使用subs method
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2017-01-29
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多