File size: 671 Bytes
ddb7b62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import numpy as np
import scipy


def grassmann_distance(U, V):
    """ Compute geodesic distance for grassmann manifold 
    
        Args:
            U, V: A matrix of bases of a linear subspace
        Return:
            grassmann distance
        See Also:
            scipy.linalg.subspace_angles
        Example:
            >>> U = np.array([[1,0,0], [1,1,1]])
            >>> V = np.array([[0,1,0], [1,1,1]])
            >>> grassmann_distance(U, V)
    """    
    # compute the canonical angles
    s = scipy.linalg.subspace_angles(U.T, V.T)
    # grassmann distance
    return sum(s * s)


def grassmann_similarity(x, y):
    return -grassmann_distance(x, y)