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_matrix
和reconstruct_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)
- 參數:
- A
numpy.ndarray
或scipy.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
,則始終使用隨機演算法)。- rng
numpy.random.Generator
,可選 偽隨機數產生器狀態。當 rng 為 None 時,會使用作業系統的熵建立新的
numpy.random.Generator
。除了numpy.random.Generator
之外的類型會傳遞給numpy.random.default_rng
以實例化Generator
。如果rand
為False
,則會忽略此引數。
- A
- 返回:
- kint
如果
eps_or_k < 1
,則達到指定相對精度所需的秩。- idx
numpy.ndarray
列索引陣列。
- proj
numpy.ndarray
插值係數。