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 变量创建矩阵的方式?
您的第一个方法是一个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包。
| 归档时间: |
|
| 查看次数: |
3469 次 |
| 最近记录: |