Below are the functions:
def center(coords): return coords - coords.mean(axis=0) def align(coords, target): targar = center(target) tempar = center(coords) tarw, tarV = numpy.linalg.eigh(targar.T.dot(targar)) tempw, tempV = numpy.linalg.eigh(tempar.T.dot(tempar)) V,s,tW=numpy.linalg.svd(numpy.dot(tarV,tempV.T)) # change sign of the last vector if needed to assure similar orientation of bases if numpy.linalg.det(V)*numpy.linalg.det(tW) < 0: V[:,2]*=-1 rot=numpy.dot(V,tW) #print rot.shape targrot=numpy.dot(targar,rot) return targrot + target.mean(axis=0)
coords and target must be n by 3 numpy arrays.
coords
target