我试图通过Sympy Variables找出创建矩阵的最佳或标准方法(如果你想疯狂,甚至我不要求那么紧张)。
我将描述我想到的唯一方法。我找到了方法symarray
(here):
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变量创建矩阵的最佳方式是什么?
答案 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)
您会注意到简单的print
或sympy.pprint
不会输出矩阵的所有元素,而只会输出矩阵符号。您还会注意到此方法不依赖于numpy
包。