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) 类数组
用于平衡的方形数据矩阵。
- permutebool, 可选
选择器,用于定义是否在缩放之前也对 A 执行置换。
- scalebool, 可选
选择器,用于打开和关闭缩放。如果为 False,则不会缩放矩阵。
- separatebool, 可选
这会将返回变换的完整矩阵切换为返回两个单独的 1-D 置换和缩放数组的元组。
- overwrite_abool, 可选
这会直接传递给 xGEBAL。本质上,它会将结果覆盖到数据中。这可能会提高空间效率。有关详细信息,请参阅 LAPACK 手册。默认为 False。
- 返回:
- B(n, n) ndarray
平衡后的矩阵
- T(n, n) ndarray
一个可能经过置换的对角矩阵,其非零项是 2 的整数次幂,以避免数值截断误差。
- scale, perm(n,) ndarray
如果
separate
关键字设置为 True,则不是上面的数组T
,而是分别给出缩放向量和置换向量,作为元组,而无需分配完整数组T
。
注释
该算法对于特征值和矩阵分解特别有用,并且在许多情况下,各种 LAPACK 例程已经调用了它。
该算法基于众所周知的 [1] 技术,并已修改以考虑特殊情况。 有关自 LAPACK v3.5.0 以来已实现的详细信息,请参阅 [2]。 在此版本之前,存在一些特殊情况,平衡实际上会使条件更差。 有关此类示例,请参阅 [3]。
该代码是 LAPACK 的 xGEBAL 例程族的包装器,用于矩阵平衡。
在 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, “关于矩阵平衡和特征向量计算”,2014 年,arXiv:1401.5766
[3]D.S. Watkins. 平衡有害的情况。 Electron. Trans. Numer. Anal, 第 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. ]])