I have a list of 3D points stored in numpy array A
with shape (N,3)
and a rotation matrix R
with shape (3,3)
. I'd like to compute the dot product of R.x
for each point x
in A
in-place. Naively I can do this:
for n in xrange(N):
A[n,:] = dot(R, A[n,:])
Is there a way to vectorize this with a native numpy call? If it matters, N is on order of a couple thousand.
There's a couple of minor updates/points of clarification to add to Aapo Kryola's (correct) answer. First, the syntax of the matrix multiplication can be slightly simplified using the recently added matrix multiplication operator
@
:Also, you can arrange the transformation in the standard form (rotation matrix first) by taking the transpose of
A
prior to the multiplication, then transposing the result:You can check that both forms of the transformation produce the same results via the following assertion:
You can multiply A with the transpose of the rotation matrix: