scipy.linalg.subspace_angles

scipy.linalg.subspace_angles(A, B)[源代码]

计算两个矩阵之间的子空间角度。

参数
A(M,N)类数组

第一个输入数组。

B(M,K)类数组

第二输入数组。

退货
anglesndarray,Shape(min(N,K),)

的列空间之间的子空间角度 AB 按降序排列。

参见

orth
svd

注意事项

这将根据中提供的公式计算子空间角度 [1]. 若要与matlab和Octave行为等效,请使用 angles[0]

1.0 新版功能.

参考文献

1

Knyazev A,阿根廷M(2002)基于A的标量积中的子空间之间的主角:算法和扰动估计。暹罗·J·科学。电脑。23:2008-2040年。

示例

具有正交列的Hadamard矩阵,因此我们预计挂起角度为 \(\frac{{\pi}}{{2}}\)

>>> from numpy.random import default_rng
>>> from scipy.linalg import hadamard, subspace_angles
>>> rng = default_rng()
>>> H = hadamard(4)
>>> print(H)
[[ 1  1  1  1]
 [ 1 -1  1 -1]
 [ 1  1 -1 -1]
 [ 1 -1 -1  1]]
>>> np.rad2deg(subspace_angles(H[:, :2], H[:, 2:]))
array([ 90.,  90.])

矩阵与自身的子空间夹角应该为零:

>>> subspace_angles(H[:, :2], H[:, :2]) <= 2 * np.finfo(float).eps
array([ True,  True], dtype=bool)

非正交子空间之间的角度位于以下极端之间:

>>> x = rng.standard_normal((4, 3))
>>> np.rad2deg(subspace_angles(x[:, :2], x[:, [2]]))
array([ 55.832])  # random