Python/NumPy中矩阵的约当范式计算

Python/NumPy中矩阵的约当范式计算,python,numpy,matrix,scipy,linear-algebra,Python,Numpy,Matrix,Scipy,Linear Algebra,在MATLAB中,您可以使用函数Jordan计算矩阵的Jordan范式 NumPy和SciPy中是否有等效的功能?有实现 但是,它肯定不会像MATLAB那么快。MATLAB来自符号数学工具箱,因此从库中替换Python似乎并不合理。具体来说,矩阵类具有方法jordan\u形式。创建sympy矩阵时,可以将numpy数组作为参数传递。例如,以下内容来自: 这将矩阵转换为约化行echolon形式,这可以通过symphy.matrix(…).rref()更有效地实现。然而,我正在寻找jordan范式:

在MATLAB中,您可以使用函数
Jordan
计算矩阵的Jordan范式

NumPy和SciPy中是否有等效的功能?

有实现

但是,它肯定不会像MATLAB那么快。

MATLAB来自符号数学工具箱,因此从库中替换Python似乎并不合理。具体来说,
矩阵
类具有方法
jordan\u形式
。创建sympy矩阵时,可以将numpy数组作为参数传递。例如,以下内容来自:


这将矩阵转换为约化行echolon形式,这可以通过symphy.matrix(…).rref()更有效地实现。然而,我正在寻找jordan范式:在sage中,您正在寻找jordan_形式,请参见。但这不是scipy/numpy。只是一个注释:Jordan form计算在浮点运算中数值不稳定——例如,您可以尝试计算4x4矩阵的特征值。LAPACK(因此Scipy)将报告它有4个不同的特征值。然而,精确算法给出的4倍退化特征值为2。请注意:Jordan形式计算在浮点运算中数值不稳定——例如,您可以尝试计算4x4矩阵的特征值。LAPACK(因此Scipy)将报告它有4个不同的特征值。然而,精确算法给出了4倍退化特征值2。
In [1]: import numpy as np

In [2]: from sympy import Matrix

In [3]: a = np.array([[5, 4, 2, 1], [0, 1, -1, -1], [-1, -1, 3, 0], [1, 1, -1, 2]])

In [4]: m = Matrix(a)

In [5]: m
Out[5]: 
Matrix([
[ 5,  4,  2,  1],
[ 0,  1, -1, -1],
[-1, -1,  3,  0],
[ 1,  1, -1,  2]])

In [6]: P, J = m.jordan_form()

In [7]: J
Out[7]: 
Matrix([
[1, 0, 0, 0],
[0, 2, 0, 0],
[0, 0, 4, 1],
[0, 0, 0, 4]])