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) array_like
用于平衡的方形数据矩阵。
- 排列bool, 可选
定义是否在缩放之前也对 A 进行排列的选择器。
- 比例bool, 可选
用于开启和关闭缩放的选择器。如果为 False,矩阵将不会被缩放。
- 单独bool, 可选
这将从一个返回完整变换矩阵的方式切换到返回两个独立的1-D排列和缩放数组的元组。
- overwrite_abool, 可选
这直接传递给 xGEBAL。本质上,它将结果覆盖到数据上。这可能会提高空间效率。详情请参见 LAPACK 手册。默认情况下为 False。
- 返回:
- B(n, n) ndarray
平衡矩阵
- T(n, n) ndarray
一个可能的置换对角矩阵,其非零项是2的整数次幂,以避免数值截断误差。
- 比例, 永久(n,) ndarray
如果
separate关键字设置为 True,那么在上面的数组T之外,缩放和排列向量将分别作为元组给出,而不分配完整的数组T。
注释
该算法特别适用于特征值和矩阵分解,并且在许多情况下,它已经被各种LAPACK例程调用。
该算法基于众所周知的 [1] 技术,并已修改以适应特殊情况。有关自 LAPACK v3.5.0 以来实施的详细信息,请参见 [2]。在此版本之前,存在一些边缘情况,平衡实际上可能会恶化条件。有关此类示例,请参见 [3]。
该代码是围绕 LAPACK 的 xGEBAL 例程族的矩阵平衡的包装器。
Added in version 0.19.0.
参考文献
[1]B.N. Parlett 和 C. Reinsch, “矩阵平衡以计算特征值和特征向量”, Numerische Mathematik, 第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. Watkins. 一个平衡有害的案例。电子数值分析,第23卷,2006年。
示例
>>> import numpy as np >>> 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. ]])