如何创建符号矩阵并用 sympy 批量替换?
Posted
技术标签:
【中文标题】如何创建符号矩阵并用 sympy 批量替换?【英文标题】:How to create symbolic matrix and do substitute in batch with sympy? 【发布时间】:2016-01-02 20:47:40 【问题描述】:我需要创建完全符号矩阵,sympy
中有现成的函数吗?
例如,如果我要手动创建一个 2x2 矩阵,我会这样做
from sympy import *
a00, a01, a10, a11 = symbols('a00 a01 a10 a11')
A = Matrix([[a00, a01],[a10, a11]])
问题是我在模拟之前不知道尺寸,并且当尺寸变高时,手动创建每个符号会很快变旧。理想情况下,我希望能够用A=Matrix(10,10)
和A[0,0]=Symbol('A00')
等创建一个10x10 矩阵。
此外,如果上述情况可行,那么能够批量替换也非常好。例如,我想要类似some_equation.subs([(A,numpy.random.rand(2,2))])
【问题讨论】:
所以MatrixSymbol
似乎可以完成这项工作,但是替换部分呢?
【参考方案1】:
您可以使用subs
方法进行替换。
In [5]: A = MatrixSymbol('A', 2, 2)
In [6]: B = MatrixSymbol('B', 2, 2)
In [7]: C = A*B
In [8]: C.subs(A: Matrix([[0, 1], [1, 0]]), B: Matrix([[2, 3], [4, 5]]))
Out[8]:
Matrix([
[0, 1],
[1, 0]])*Matrix([
[2, 3],
[4, 5]])
您的MatrixSymbol
对象可能需要符号维度。
【讨论】:
【参考方案2】:我认为您可能一直在尝试使矩阵的所有元素都成为单独的符号? 这是我试图创建一个大小为“states x states”的数组 rho:
rho = np.array([[Symbol("rho".format(i,j)) for j in range(len(states))] for i in range(len(states))])
【讨论】:
以上是关于如何创建符号矩阵并用 sympy 批量替换?的主要内容,如果未能解决你的问题,请参考以下文章