scipy.linalg.interpolative.

interp_decomp#

scipy.linalg.interpolative.interp_decomp(A, eps_or_k, rand=True, rng=None)[source]#

計算矩陣的 ID。

矩陣 A 的 ID 是一種因式分解,由秩 k、列索引陣列 idx 和插值係數 proj 定義,使得

numpy.dot(A[:,idx[:k]], proj) = A[:,idx[k:]]

然後,原始矩陣可以重建為

numpy.hstack([A[:,idx[:k]],
                            numpy.dot(A[:,idx[:k]], proj)]
                        )[:,numpy.argsort(idx)]

或者透過常式 reconstruct_matrix_from_id。這可以等效地寫成

numpy.dot(A[:,idx[:k]],
                    numpy.hstack([numpy.eye(k), proj])
                  )[:,np.argsort(idx)]

以骨架矩陣和插值矩陣表示

B = A[:,idx[:k]]

P = numpy.hstack([numpy.eye(k), proj])[:,np.argsort(idx)]

分別參見 reconstruct_interp_matrixreconstruct_skel_matrix

ID 可以計算到任何相對精度或秩(取決於 eps_or_k 的值)。如果指定了精度 (eps_or_k < 1),則此函數具有以下輸出簽名

k, idx, proj = interp_decomp(A, eps_or_k)

否則,如果指定了秩 (eps_or_k >= 1),則輸出簽名為

idx, proj = interp_decomp(A, eps_or_k)
參數:
Anumpy.ndarrayscipy.sparse.linalg.LinearOperator,具有 rmatvec

要分解的矩陣

eps_or_kfloat 或 int

近似的相對誤差(如果 eps_or_k < 1)或秩(如果 eps_or_k >= 1)。

randbool,可選

如果 A 的類型為 numpy.ndarray,是否使用隨機抽樣(如果 A 的類型為 scipy.sparse.linalg.LinearOperator,則始終使用隨機演算法)。

rngnumpy.random.Generator,可選

偽隨機數產生器狀態。當 rng 為 None 時,會使用作業系統的熵建立新的 numpy.random.Generator。除了 numpy.random.Generator 之外的類型會傳遞給 numpy.random.default_rng 以實例化 Generator。如果 randFalse,則會忽略此引數。

返回:
kint

如果 eps_or_k < 1,則達到指定相對精度所需的秩。

idxnumpy.ndarray

列索引陣列。

projnumpy.ndarray

插值係數。