This is how I always do it: In [1]: import numpy as np In [3]: tmat = np.array([[0., 1., 0., 5.],[0., 0., 1., 3.],[1., 0., 0., 2.]]) In [4]: tmat Out[4]: array([[ 0., 1., 0., 5.], [ 0., 0., 1., 3.], [ 1., 0., 0., 2.]]) In [5]: points = np.random.random((5, 3)) In [7]: hpoints = np.column_stack((points, np.ones(len(points)))) In [9]: hpoints Out[9]: array([[ 0.17437059, 0.38693627, 0.201047 , 1. ], [ 0.99712373, 0.16958721, 0.03050696, 1. ], [ 0.30653326, 0.62037744, 0.35785282, 1. ], [ 0.78936771, 0.93692711, 0.58138493, 1. ], [ 0.29914065, 0.08808239, 0.72032172, 1. ]]) In [10]: np.dot(tmat, hpoints.T).T Out[10]: array([[ 5.38693627, 3.201047 , 2.17437059], [ 5.16958721, 3.03050696, 2.99712373], [ 5.62037744, 3.35785282, 2.30653326], [ 5.93692711, 3.58138493, 2.78936771], [ 5.08808239, 3.72032172, 2.29914065]]) On Mon, Mar 1, 2010 at 6:12 AM, Friedrich Romstedt < friedrichromstedt@gmail.com> wrote:
2010/3/1 Charles R Harris <charlesr.harris@gmail.com>:
On Sun, Feb 28, 2010 at 7:58 PM, Ian Mallett <geometrian@gmail.com> wrote:
Excellent--and a 3D rotation matrix is 3x3--so the list can remain n*3. Now the question is how to apply a rotation matrix to the array of vec3?
It looks like you want something like
res = dot(vec, rot) + tran
You can avoid an extra copy being made by separating the parts
res = dot(vec, rot) res += tran
where I've used arrays, not matrices. Note that the rotation matrix multiplies every vector in the array.
When you want to rotate a ndarray "list" of vectors:
a.shape (N, 3)
a [[1., 2., 3. ] [4., 5., 6. ]]
by some rotation matrix:
rotation_matrix.shape (3, 3)
where each row of the rotation_matrix represents one vector of the rotation target basis, expressed in the basis of the original system,
you can do this by writing:
numpy.dot(a, rotations_matrix) ,
as Chuck pointed out.
This gives you the rotated vectors in an ndarray "list" again:
numpy.dot(a, rotation_matrix).shape (N, 3)
This is just somewhat more in detail what Chuck already stated
Note that the rotation matrix multiplies every vector in the array.
my 2 cents, Friedrich _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion