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