scipy.linalg.interpolative.

interp_decomp#

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

计算矩阵的 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

插值系数。