创建 Sympy(符号)变量矩阵的标准方法是什么?

Cha*_*ker 5 python matrix sympy

我试图找到使用 Sympy Variables 创建矩阵(甚至张量,如果你想疯狂,但我不要求的话)的最佳或标准方法。

我将描述我想到的唯一方法。我找到了方法symarray这里):

A = symarray('a', (3,4))
type(A)
<class 'numpy.ndarray'>
A
array([[a_0_0, a_0_1, a_0_2, a_0_3],
       [a_1_0, a_1_1, a_1_2, a_1_3],
       [a_2_0, a_2_1, a_2_2, a_2_3]], dtype=object)
Run Code Online (Sandbox Code Playgroud)

我还注意到可以用Matrixsympy 函数包装它:

B = Matrix( symarray('b', (3,4)) )
type(B)
<class 'sympy.matrices.dense.MutableDenseMatrix'>
B
Matrix([
[b_0_0, b_0_1, b_0_2, b_0_3],
[b_1_0, b_1_1, b_1_2, b_1_3],
[b_2_0, b_2_1, b_2_2, b_2_3]])
Run Code Online (Sandbox Code Playgroud)

两者中是否有任何一种是标准的做法?哪种是最好的或者人们通常使用 sympy 变量创建矩阵的方式?

Han*_*bel 7

您的第一个方法是一个numpy对象,第二个方法是一个sympy对象。当您进行(矩阵)乘法时,差异会很明显。

第一次尝试

sympy.pprint(A*A)
Run Code Online (Sandbox Code Playgroud)

这将产生一个 3x4 矩阵,其中每个元素均平方(逐元素乘法)。

然后尝试

sympy.pprint(B*B)
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为对于矩阵乘法,您需要有足够的维度。因此尝试设置B为 4x4 矩阵,您将得到结果(矩阵乘法)。

因此,使用哪一种取决于您的用例。如果您想做真正的符号数学,那么我建议坚持使用第二种方法,使所有内容尽可能保持一致。如果您更喜欢数字运算(“numpy 的典型用例”),可能会使用一些符号进行增强,那么请使用第一种方法。

编辑 查看(最近的)文档我认为创建矩阵最有同情心的方法是

C = sympy.MatrixSymbol('C', 4,4)
sympy.pprint(C)
sympy.pprint(C.as_explicit())
type(C)
Run Code Online (Sandbox Code Playgroud)

您会注意到,简单的printorsympy.pprint不会输出矩阵的所有元素,而只是输出矩阵符号。您还会注意到,此方法不依赖于numpy包。