scipy.linalg.
funm#
- scipy.linalg.funm(A, func, disp=True)[source]#
评估由可调用对象指定的矩阵函数。
返回矩阵值函数
f
在 A 处的值。函数f
是标量值函数 func 到矩阵的扩展。本文档假设数组参数具有指定的“核心”形状。然而,此函数的数组参数可能在核心形状之前附加额外的“批次”维度。在这种情况下,数组被视为低维切片的批次;详情请参阅 批处理线性操作。
- 参数:
- A(N, N) 类数组对象
评估函数的矩阵
- func可调用对象
评估标量函数 f 的可调用对象。必须向量化(例如使用 vectorize)。
- disp布尔值, 可选
如果结果中的错误估计值较大,则打印警告而不是返回估计错误。(默认值:True)
- 返回:
- funm(N, N) ndarray
由 func 指定的矩阵函数在 A 处的值
- errest浮点数
(if disp == False)
估计误差的 1-范数,||err||_1 / ||A||_1
备注
此函数实现了基于 Schur 分解的通用算法([1] 中的算法 9.1.1.)。
如果已知输入矩阵可对角化,那么依赖于特征分解可能会更快。例如,如果您的矩阵是 Hermitian 矩阵,您可以执行
>>> from scipy.linalg import eigh >>> def funm_herm(a, func, check_finite=False): ... w, v = eigh(a, check_finite=check_finite) ... ## if you further know that your matrix is positive semidefinite, ... ## you can optionally guard against precision errors by doing ... # w = np.maximum(w, 0) ... w = func(w) ... return (v * w).dot(v.conj().T)
参考文献
[1]Gene H. Golub, Charles F. van Loan, 矩阵计算 第4版
示例
>>> import numpy as np >>> from scipy.linalg import funm >>> a = np.array([[1.0, 3.0], [1.0, 4.0]]) >>> funm(a, lambda x: x*x) array([[ 4., 15.], [ 5., 19.]]) >>> a.dot(a) array([[ 4., 15.], [ 5., 19.]])