scipy.linalg.

乐趣#

scipy.linalg.funm(A, func, disp=True)[源代码][源代码]#

评估由可调用对象指定的矩阵函数。

返回矩阵值函数 fA 处的值。函数 f 是将标量值函数 func 扩展到矩阵的结果。

参数:
A(N, N) array_like

要在其上评估函数的矩阵

函数可调用

可调用对象,用于评估标量函数 f。必须向量化(例如使用 vectorize)。

dispbool, 可选

如果结果中的错误估计较大,则打印警告而不是返回估计的错误。(默认值:True)

返回:
funm(N, N) ndarray

由func指定的矩阵函数的值在`A`处求值

errest浮动

(如果 disp == False)

估计误差的1-范数,||err||_1 / ||A||_1

注释

此函数基于Schur分解实现了通用算法([R89cfe1be02b4-1]_中的算法9.1.1.)。

如果输入矩阵已知是可对角化的,那么依赖于特征分解可能会更快。例如,如果你的矩阵是厄米特矩阵,你可以这样做

>>> 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.]])