bundles / scipy latest / scipy / linalg / _decomp_svd / subspace_angles
function
scipy.linalg._decomp_svd:subspace_angles
source: build-install/usr/lib/python3.14/site-packages/scipy/linalg/_decomp_svd.py:496
Signature
def subspace_angles(A, B)Summary
Compute the subspace angles between two matrices.
Extended Summary
The documentation is written assuming array arguments are of specified "core" shapes. However, array argument(s) of this function may have additional "batch" dimensions prepended to the core shape. In this case, the array is treated as a batch of lower-dimensional slices; see linalg_batch for details.
Parameters
A: (M, N) array_likeThe first input array.
B: (M, K) array_likeThe second input array.
Returns
angles: ndarray, shape (min(N, K),)The subspace angles between the column spaces of
AandBin descending order.
Notes
This computes the subspace angles according to the formula provided in [1]. For equivalence with MATLAB and Octave behavior, use angles[0].
Examples
A Hadamard matrix, which has orthogonal columns, so we expect that the subspace angle to be :math:`\frac{\pi}{2}`: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.])And the subspace angle of a matrix to itself should be zero:
subspace_angles(H[:, :2], H[:, :2]) <= 2 * np.finfo(float).eps
✗array([ True, True])The angles between non-orthogonal subspaces are in between these extremes:
x = rng.standard_normal((4, 3))
✓np.rad2deg(subspace_angles(x[:, :2], x[:, [2]]))
✗array([20.924])
See also
Aliases
scipy.linalg.subspace_angles