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_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
with rmatvec 要分解的矩阵
- eps_or_kfloat 或 int
近似的相对误差(如果 eps_or_k < 1)或秩(如果 eps_or_k >= 1)。
- randbool,可选
如果 A 是
numpy.ndarray
类型(如果 A 是scipy.sparse.linalg.LinearOperator
类型,则始终使用随机算法),则是否使用随机采样。
- A
- 返回:
- kint
如果 eps_or_k < 1,则达到指定相对精度所需的秩。
- idx
numpy.ndarray
列索引数组。
- proj
numpy.ndarray
插值系数。