Análise de Procrustes com NumPy?
Existe algo como o de Matlab?procrustes
funciona em NumPy / SciPy ou bibliotecas relacionadas?
Para referência. A análise de Procrustes visa alinhar 2 conjuntos de pontos (em outras palavras, 2 formas) para minimizar a distância quadrada entre eles, removendo componentes de dobra de escala, translação e rotação.
Exemplo no Matlab:
X = [0 1; 2 3; 4 5; 6 7; 8 9]; % first shape
R = [1 2; 2 1]; % rotation matrix
t = [3 5]; % translation vector
Y = X * R + repmat(t, 5, 1); % warped shape, no scale and no distortion
[d Z] = procrustes(X, Y); % Z is Y aligned back to X
Z
Z =
0.0000 1.0000
2.0000 3.0000
4.0000 5.0000
6.0000 7.0000
8.0000 9.0000
Mesma tarefa no NumPy:
X = arange(10).reshape((5, 2))
R = array([[1, 2], [2, 1]])
t = array([3, 5])
Y = dot(X, R) + t
Z = ???
Nota: Estou interessado apenas em forma alinhada, desde erro quadrado (variáveld
no código Matlab) é facilmente calculado a partir de 2 formas.