Source code for geometry.unittests.procrustes_test

from geometry import (random_directions, random_rotation, np,
                      best_orthogonal_transform, assert_allclose,
                      closest_orthogonal_matrix)
from geometry.procrustes import best_similarity_transform


[docs]def best_orthogonal_transform_test1(): X = random_directions(20) R = random_rotation() Y = np.dot(R, X) R2 = best_orthogonal_transform(X, Y) assert_allclose(R, R2)
[docs]def best_orthogonal_transform_test2(): N = 20 X = random_directions(N) Y = random_directions(N) R1 = best_orthogonal_transform(X, Y) R2 = best_orthogonal_transform(Y, X) assert_allclose(R1.T, R2)
[docs]def closest_orthogonal_matrix_test1(): R = random_rotation() R2 = closest_orthogonal_matrix(R) assert_allclose(R, R2)
[docs]def best_similarity_transform_test(): N = 20 for K in [3]: # TODO: multiple dimensions X = np.random.randn(K, N) R = random_rotation() # R = np.eye(K) t = np.random.randn(K, 1) # print 'R: %s' % R # print 't: %s' % t Y = np.dot(R, X) + t R2, t2 = best_similarity_transform(X, Y) # print 'R2: %s' % R2 # print 't2: %s' % t2 Y2 = np.dot(R2, X) + t2 assert_allclose(R, R2, atol=1e-10) assert_allclose(t, t2) assert_allclose(Y, Y2)