In [1]: M = MatrixSymbol('M', 3, 2)
In [2]: M # Just an expression
Out[2]: M
In [3]: Matrix(M) # Turn it into an explicit matrix if you desire
Out[3]:
⎡M₀₀ M₀₁⎤
⎢ ⎥
⎢M₁₀ M₁₁⎥
⎢ ⎥
⎣M₂₀ M₂₁⎦
In [4]: M.T * M # Still just an expression
Out[4]:
T
M ⋅M
In [5]: Matrix(M.T * M) # Fully evaluate
Out[5]:
⎡ 2 2 2 ⎤
⎢ M₀₀ + M₁₀ + M₂₀ M₀₀⋅M₀₁ + M₁₀⋅M₁₁ + M₂₀⋅M₂₁⎥
⎢ ⎥
⎢ 2 2 2 ⎥
⎣M₀₁⋅M₀₀ + M₁₁⋅M₁₀ + M₂₁⋅M₂₀ M₀₁ + M₁₁ + M₂₁ ⎦
2 回答
这样的事情怎么样:
编辑:我想我应该添加一个小解释 . sympy.Matrix() 的前两个参数将矩阵定义为3x2(如您所指定) . 第三个参数是 lambda 函数,它本质上是在一行中定义函数的简写方式,而不是用 def 正式定义它 . 此函数将变量 i 和 j 作为输入,它们很方便地是矩阵的索引 . 对于传递到 lambda 的每一对 (i,j) (即,对于矩阵的每个元素),我们正在创建一个新的符号变量 M_ij . sympy.var() 将字符串作为输入,用于定义新符号变量的名称 . 我们使用格式字符串 'M_%d%d' 动态生成此字符串并使用 (i+1,j+1) 填充它 . 我们正在向 i 和 j 添加1,因为您希望矩阵为1索引,而不是像Python中的标准那样0索引 .
考虑使用
MatrixSymbol
而不是Matrix
对象 .MatrixSymbol
表示矩阵而不需要显式元素 .