matrix_balance#
- scipy.linalg.matrix_balance(A, permute=True, scale=True, separate=False, overwrite_a=False)[source]#
計算用於行/列平衡的對角相似轉換。
平衡嘗試通過應用相似轉換來均衡行和列的 1-範數,使得矩陣條目的量級變化反映到縮放矩陣。
此外,如果啟用,矩陣會先被置換以隔離矩陣的上三角部分,並且再次地,如果也啟用了縮放,則僅對剩餘的子區塊進行縮放。
平衡後的矩陣滿足以下等式
\[B = T^{-1} A T\]縮放係數近似為最接近的 2 的冪,以避免捨入誤差。
- 參數:
- A(n, n) array_like
用於平衡的方陣資料。
- permutebool, optional
選擇器,用於定義是否在縮放之前也執行 A 的置換。
- scalebool, optional
選擇器,用於開啟和關閉縮放。如果為 False,則不會縮放矩陣。
- separatebool, optional
此選項從返回轉換的完整矩陣切換為返回兩個獨立的 1-D 置換和縮放陣列的元組。
- overwrite_abool, optional
這直接傳遞給 xGEBAL。 基本上,將結果覆寫到資料。 它可能會提高空間效率。 請參閱 LAPACK 手冊以瞭解詳細資訊。 預設值為 False。
- 返回:
- B(n, n) ndarray
平衡後的矩陣
- T(n, n) ndarray
一個可能經過置換的對角矩陣,其非零條目是 2 的整數冪,以避免數值截斷誤差。
- scale, perm(n,) ndarray
如果
separate
關鍵字設定為 True,則不返回上面的陣列T
,而是將縮放和置換向量作為元組單獨給出,而無需分配完整的陣列T
。
Notes
此演算法對於特徵值和矩陣分解特別有用,並且在許多情況下,它已經被各種 LAPACK 常式調用。
該演算法基於著名的 [1] 技術,並已進行修改以處理特殊情況。 有關自 LAPACK v3.5.0 以來已實作的詳細資訊,請參閱 [2]。 在此版本之前,在某些極端情況下,平衡實際上可能會使條件變差。 有關此類範例,請參閱 [3]。
此程式碼是 LAPACK 的 xGEBAL 常式系列的包裝函式,用於矩陣平衡。
在版本 0.19.0 中新增。
參考文獻
[1]B.N. Parlett 和 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. Watkins。 A case where balancing is harmful. Electron. Trans. Numer. Anal, Vol.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. ]])