当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy linalg.subspace_angles用法及代码示例


本文简要介绍 python 语言中 scipy.linalg.subspace_angles 的用法。

用法:

scipy.linalg.subspace_angles(A, B)#

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

参数

A (M, N) 数组

第一个输入数组。

B (M, K) 数组

第二个输入数组。

返回

angles ndarray,形状(min(N,K),)

A 和 B 的列空间之间的子空间角度按降序排列。

注意

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

参考

[1]

Knyazev A, Argentati M (2002) 基于 A 的标量积中子空间之间的主角:算法和扰动估计。暹罗学家科学。计算。 23:2008-2040。

例子

具有正交列的 Hadamard 矩阵,因此我们期望超空间角为

>>> import numpy as np
>>> from scipy.linalg import hadamard, subspace_angles
>>> rng = np.random.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

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.subspace_angles。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。