【问题标题】:Difference between eye and Identity in SymPySymPy中眼睛和身份的区别
【发布时间】:2018-06-14 10:02:06
【问题描述】:

在 SymPy 中,eye(5)Identity(5) 有什么区别?

如果我有一个矩阵X,我看到X + eye(5)X + Identity(5) 给出不同的结果(后者不是矩阵)。

【问题讨论】:

  • 告诉我们你得到了什么。实际的代码示例和显示比文字描述要清晰得多。

标签: python matrix sympy identity


【解决方案1】:

SymPy 区分

  • 显式矩阵,具有一定的大小,例如 3 x 3,以及显式(可能是符号)条目;
  • 矩阵表达式,可能有符号大小,比如n乘n。

eye 创建一个矩阵,Identity 创建一个矩阵表达式。例如:

n = Symbol("n")
A = Identity(n)  # works
A = eye(n)       # throws an error

可以用这个对象做一些计算,比如

t = trace(A)     # n
B = BlockMatrix([[A, -A], [-A, A]])

如果可能,可以使用as_explicit 方法将矩阵表达式转换为显式矩阵:

A = Identity(3)
print(A.as_explicit())

打印

Matrix([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])

可以使用Matrix(A) 达到同样的效果。

【讨论】:

    【解决方案2】:

    Identity 更多的是关于能够使用符号I 来代表身份。如果你想要使用它的矩阵,你必须做Matrix(Identity)

    见:

    from random import randint
    from sympy import *
    
    X = Matrix(list([randint(1, 10) for _ in range(5)] for _ in range(5)))
    
    print(X + eye(5))
    

    输出:矩阵([[7, 10, 5, 5, 4], [3, 7, 9, 5, 4], [1, 9, 6, 3, 4], [4, 8, 5 , 2, 9], [9, 3, 6, 6, 4]])

    print(X + Matrix(Identity(5)))
    

    同样的输出:Matrix([[7, 10, 5, 5, 4], [3, 7, 9, 5, 4], [1, 9, 6, 3, 4], [4, 8, 5, 2, 9], [9, 3, 6, 6, 4]])

    print(X + Identity(5))
    
    '''different output more about the symbol: I + Matrix([
    [6, 10, 5, 5, 4],
    [3,  6, 9, 5, 4],
    [1,  9, 5, 3, 4],
    [4,  8, 5, 1, 9],
    [9,  3, 6, 6, 3]])'''
    

    docs 中并没有过多提及。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 2017-08-11
      • 1970-01-01
      • 2012-03-14
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多