import numpy as np def rotate(x, phi, n): x = np.asarray(x) n = np.asarray(n) r = np.cos(phi)*np.identity(3) + (1-np.cos(phi))*np.outer(n,n) + \ np.sin(phi)*np.array([[0,n[2],-n[1]],[-n[2],0,n[0]],[n[1],-n[0],0]]) return np.inner(x,r)