Package geometry :: Package subspaces :: Module subspaces
[hide private]
[frames] | no frames]

Source Code for Module geometry.subspaces.subspaces

 1  from . import np, contract 
 2  from .. import assert_allclose 
 3   
 4   
 5  @contract(A='array[NxK]') 
6 -def normalize_columns(A):
7 A = A.copy() 8 _, k = A.shape 9 for j in range(k): 10 A[:, j] = A[:, j] / np.linalg.norm(A[:, j]) 11 return A
12 13 14 @contract(A='array[NxK]')
15 -def proj_from_subspace(A):
16 An = normalize_columns(A) 17 return np.dot(An, An.T)
18
19 20 -def get_random_proj(n, k):
21 A = np.random.randn(n, k) 22 return proj_from_subspace(A)
23
24 25 @contract(P='array[NxN]') 26 -def assert_projection(P):
27 assert_allclose(P.T, P) 28 assert_allclose(np.dot(P, P), P)
29
30 31 -def check():
32 # XXX 33 n = 6 34 P1 = get_random_proj(n, 1) 35 P2 = get_random_proj(n, 1) 36 37 C = np.dot(P1, P2) 38 assert_projection(P1) 39 assert_projection(P2) 40 41 assert_projection(C)
42