scipy.linalg.interpolative.

interp_decomp#

scipy.linalg.interpolative.interp_decomp(A, eps_or_k, rand=True)[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 with rmatvec

要分解的矩阵

eps_or_kfloat 或 int

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

randbool,可选

如果 Anumpy.ndarray 类型(如果 Ascipy.sparse.linalg.LinearOperator 类型,则始终使用随机算法),则是否使用随机采样。

返回:
kint

如果 eps_or_k < 1,则达到指定相对精度所需的秩。

idxnumpy.ndarray

列索引数组。

projnumpy.ndarray

插值系数。