Hello, I would like to port a matlab library which provides functions for rigid body mechanics such as operations on homogeneous matrices (in SE(3)), twists (in se(3)) and so.
In matlab, the library worked on 3d matrices: n homoneous matrices were stacked along the 3d dimension. This speeded up computations on multiple matrices, at the price that native matrix opertators such H1 * H2 did not work (it is not defined for 3d matrices). In this spirit, in numpy a set of rotation matrices could be built in the following way: def rotx(theta): """ SE(3) matrices corresponding to a rotation around x-axis. Theta is a 1-d array """ costheta = np.cos(theta) sintheta = np.sin(theta) H = np.zeros((theta.size,4,4)) H[:,0,0] = 1 H[:,3,3] = 1 H[:,1,1] = costheta H[:,2,2] = costheta H[:,2,1] = sintheta H[:,1,2] = sintheta return H I'm now seeking advices regarding an implementation with numpy (it's my first time with numpy). - Is there any difference between a 3d array and a 1-d array of 2-d arrays (seems not) - would you use a 3d-array or a list of 2d arrays or anything else to store these matrices ? - Is there a way to work easily on multiple matrices of the same shape ? (in single-instruction/multiple-data spirit) for instance if A.shape==(3,2,4) and B.shape=(3,4,1), what is the best way to compute C for i = (0,1,2) C[i,:,:] = np.dot(A[i,:,:],B[i,:,:]) - is it a good idea/not to hard to subclass ndarray with a HomogenousMatrix class ? (one could then redefine inv() for instance) - Is my implementation of rotx efficient ? Thank you for any help, and please feel free to send me back reading anything I missed. regards -- Sébastien Barthélemy _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion