scipy.linalg.subspace_angles¶
- scipy.linalg.subspace_angles(A, B)[源代码]¶
计算两个矩阵之间的子空间角度。
- 参数
- A(M,N)类数组
第一个输入数组。
- B(M,K)类数组
第二输入数组。
- 退货
- anglesndarray,Shape(min(N,K),)
的列空间之间的子空间角度 A 和 B 按降序排列。
注意事项
这将根据中提供的公式计算子空间角度 [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