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_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
插值系数。