scipy.linalg.matrix_balance

scipy.linalg.matrix_balance(A, permute=True, scale=True, separate=False, overwrite_a=False)[源代码]

计算行/列平衡的对角相似性转换。

平衡试图通过应用相似性变换来使行和列1范数相等,使得矩阵条目的幅度变化被反映到缩放矩阵。

此外,如果启用,则首先排列矩阵以隔离矩阵的上三角部分,并且如果也启用缩放,则仅对剩余的子块进行缩放。

平衡矩阵满足以下等式

\[B=T^{-1}A T\]

缩放系数近似为最接近的2次方,以避免舍入误差。

参数
A(n,n)类数组

用于平衡的方形数据矩阵。

permute布尔值,可选

用于定义在缩放之前是否也执行A的置换的选择符。

scale布尔值,可选

用于打开和关闭缩放的选择器。如果为False,则不会缩放矩阵。

separate布尔值,可选

这将从返回变换的完整矩阵切换到两个独立的一维置换和缩放数组的元组。

overwrite_a布尔值,可选

这将直接传递给xGEBAL。实质上,将结果覆盖到数据。这可能会提高空间效率。有关详细信息,请参阅LAPACK手册。默认情况下,这为False。

退货
B(n,n)ndarray

平衡矩阵

T(n,n)ndarray

一种可能置换的对角矩阵,其非零项是2的整数次幂,以避免数值截断错误。

烫平、烫发(n,)ndarray

如果 separate 关键字设置为True Then,而不是数组 T 上面,缩放和置换向量分别作为一个元组给出,而不分配整个数组 T

注意事项

该算法对于特征值和矩阵分解特别有用,在许多情况下,它已经被各种LAPACK例程调用。

该算法基于众所周知的 [1] 并已进行了修改,以适应特殊情况。看见 [2] 有关从LAPACK v3.5.0开始实施的详细信息。在这个版本之前,有一些角落的情况下,平衡实际上会恶化条件。看见 [3] 对于这样的例子。

该代码是LAPACK的xGEBAL例程系列的包装器,用于矩阵平衡。

0.19.0 新版功能.

参考文献

1

: B.N. Parlett and C. Reinsch, "Balancing a Matrix for Calculation of Eigenvalues and Eigenvectors", Numerische Mathematik, Vol.13(4), 1969, DOI:10.1007/BF02165404

2

: R. James, J. Langou, B.R. Lowery, "On matrix balancing and eigenvector computation", 2014, arXiv:1401.5766

3

:D.S.沃特金斯。平衡是有害的。电子。翻译过来的。数字。“肛门”,第23卷,2006年。

示例

>>> from scipy import linalg
>>> x = np.array([[1,2,0], [9,1,0.01], [1,2,10*np.pi]])
>>> y, permscale = linalg.matrix_balance(x)
>>> np.abs(x).sum(axis=0) / np.abs(x).sum(axis=1)
array([ 3.66666667,  0.4995005 ,  0.91312162])
>>> np.abs(y).sum(axis=0) / np.abs(y).sum(axis=1)
array([ 1.2       ,  1.27041742,  0.92658316])  # may vary
>>> permscale  # only powers of 2 (0.5 == 2^(-1))
array([[  0.5,   0. ,  0. ],  # may vary
       [  0. ,   1. ,  0. ],
       [  0. ,   0. ,  1. ]])