如何创建符号矩阵并用批量替换?

时间:2015-10-06 03:53:28

标签: python numpy sympy python-3.5

我需要创建完全符号矩阵,sympy是否有现成的函数?

例如,如果我手动创建一个2x2矩阵,我会这样做

from sympy import *

a00, a01, a10, a11 = symbols('a00 a01 a10 a11')
A = Matrix([[a00, a01],[a10, a11]])

问题是我不知道模拟之前的维度,并且当维度变高时手动创建每个符号变得很快。理想情况下,我希望能够创建一个带有A=Matrix(10,10) {10}的10x10矩阵,等等。

此外,如果上述情况可能,那么能够批量进行替换真的很不错。例如,我想要A[0,0]=Symbol('A00')

之类的东西

2 个答案:

答案 0 :(得分:2)

您可以使用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对象可能需要符号维度。

答案 1 :(得分:1)

我认为您可能一直在尝试将矩阵的所有元素都分离为符号? 这是我尝试制作大小为“状态x状态”的数组rho的东西:

rho = np.array([[Symbol("rho{}{}".format(i,j)) for j in range(len(states))] for i in range(len(states))])