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

时间:2017-08-16 18:03:43

标签: python matrix sympy

我试图通过Sympy Variables找出创建矩阵的最佳或标准方法(如果你想疯狂,甚至我不要求那么紧张)。

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

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)

我也注意到可以用Matrix sympy函数包装它:

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]])

是否有两种标准方式中的任何一种?人们通常使用sympy变量创建矩阵的最佳方式是什么?

1 个答案:

答案 0 :(得分:3)

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

首先尝试

sympy.pprint(A*A)

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

然后尝试

sympy.pprint(B*B)

这不起作用,因为对于矩阵乘法,您需要有足够的尺寸。因此,尝试将B设置为4x4矩阵,您将得到一个结果(矩阵乘法)。

所以使用哪一个取决于您的用例。如果你想做真正的符号数学,那么我建议坚持第二种方法,尽可能保持一致。如果你在numbercrunching之后(“numpy的典型用例”),可能会增加一些符号,那么使用第一种方法。

修改 看一下(最近的)documentation我认为创建矩阵最常见的方式是

C = sympy.MatrixSymbol('C', 4,4)
sympy.pprint(C)
sympy.pprint(C.as_explicit())
type(C)

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