Python 矩阵逆的辛密矩阵显示

Python 矩阵逆的辛密矩阵显示,python,sympy,matrix-inverse,Python,Sympy,Matrix Inverse,我正在使用一个基本的回归例子,希望它能成为分解更复杂估计量的有效工具。然而,我不知道如何为流程中的每个步骤显示密集矩阵。特别是,我在尝试表示最小二乘估计值时遇到了麻烦: 以下是仅5次观察的设置 from sympy import * y=MatrixSymbol('y',5,1) x=MatrixSymbol('x',5,2) b=MatrixSymbol('b',2,1) 我可以表示基本组件: (x.T*x).as_explicit() 我甚至可以象征性地表示第一分量的倒数 (x.T*x

我正在使用一个基本的回归例子,希望它能成为分解更复杂估计量的有效工具。然而,我不知道如何为流程中的每个步骤显示密集矩阵。特别是,我在尝试表示最小二乘估计值时遇到了麻烦:

以下是仅5次观察的设置

from sympy import *

y=MatrixSymbol('y',5,1)
x=MatrixSymbol('x',5,2)
b=MatrixSymbol('b',2,1)
我可以表示基本组件:

(x.T*x).as_explicit()
我甚至可以象征性地表示第一分量的倒数

(x.T*x).I
然而,当我试图展开第一个分量的倒数时,我被一个索引器击中

(x.T*x).I.as_explicit()

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-182-93739c34be6e> in <module>()
----> 1 (x.T*x).I.as_explicit()

/home/choct155/analysis/Anaconda/lib/python2.7/site-packages/sympy/matrices/expressions/matexpr.pyc in as_explicit(self)
    230         return ImmutableMatrix([[    self[i, j]
    231                             for j in range(self.cols)]
--> 232                             for i in range(self.rows)])
    233 
    234     def as_mutable(self):

/home/choct155/analysis/Anaconda/lib/python2.7/site-packages/sympy/matrices/expressions/matexpr.pyc in __getitem__(self, key)
    198             i, j = sympify(i), sympify(j)
    199             if self.valid_index(i, j) is not False:
--> 200                 return self._entry(i, j)
    201             else:
    202                 raise IndexError("Invalid indices (%s, %s)" % (i, j))

/home/choct155/analysis/Anaconda/lib/python2.7/site-packages/sympy/matrices/expressions/matpow.pyc in _entry(self, i, j)
     27         if self.exp.is_Integer:
     28             # Make an explicity MatMul out of the MatPow
---> 29             return MatMul(*[self.base for k in range(self.exp)])._entry(i, j)
     30 
     31 from matmul import MatMul

/home/choct155/analysis/Anaconda/lib/python2.7/site-packages/sympy/matrices/expressions/matmul.pyc in _entry(self, i, j, expand)
     45             return coeff * matrices[0][i, j]
     46 
---> 47         head, tail = matrices[0], matrices[1:]
     48         assert len(tail) != 0
     49 

IndexError: list index out of range
相反的情况存在,所以我只是要求Sympy做一些它做不到的事情?这里的目标是通过IPython笔记本中的矩阵表示和数据处理,明确地逐步完成估算过程的每个组成部分。我一直无法找到解决方案,因此在此方面的任何帮助都将不胜感激。

我怀疑显式方法是否支持矩阵求逆中的变量表达式。由于执行反向操作需要更多的空间,因此可能会导致数组索引超出范围。但是,如果指定了矩阵,则它可以工作:

I = Identity(3)
I.as_explicit()
  1  0  0 
  0  1  0
  0  0  1
I.I.as_explicit()
  1  0  0
  0  1  0
  0  0  1

这是一个错误。我打开了它。解决方法是x.T*x.as_explicit.I,但这似乎引发了它自己的异常。所以,在其中一个问题解决之前,很遗憾,我没有一个好的解决方案,除了使用.det和2x2矩阵的常用公式手动计算逆矩阵

谢谢你的评论,但我不清楚第二次调用在概念上与我抛出索引器的调用有何不同。您介意详细说明一下吗?如果您想尝试解决其中一个bug,我们欢迎您提出拉取请求。
I = Identity(3)
I.as_explicit()
  1  0  0 
  0  1  0
  0  0  1
I.I.as_explicit()
  1  0  0
  0  1  0
  0  0  1