(U1, U2)
| 517 | return np.sum(M * pi) + reg * np.sum(pi * (np.log(pi) - 1)) |
| 518 | |
| 519 | def grassmann_distance(U1, U2): |
| 520 | proj = U1.T @ U2 |
| 521 | _, s, _ = np.linalg.svd(proj) |
| 522 | s[s > 1] = 1 |
| 523 | s = np.arccos(s) |
| 524 | return np.linalg.norm(s) |
| 525 | |
| 526 | # loop |
| 527 | it = 0 |