Tengo una lista de puntos 3D almacenados en la matriz de números A
con forma (N,3)
y una matriz de rotación R
con forma (3,3)
. Me gustaría calcular el producto de puntos de Rx
para cada punto x
en A
en el lugar. De manera ingenua puedo hacer esto:
for n in xrange(N): A[n,:] = dot(R, A[n,:])
¿Hay una manera de vectorizar esto con una llamada natpy? Si importa, N está en el orden de un par de miles.
Puedes multiplicar A con la transposición de la matriz de rotación:
A = dot(A, RT)
Hay un par de actualizaciones menores / puntos de aclaración para agregar a la respuesta (correcta) de Aapo Kryola. Primero, la syntax de la multiplicación de matrices se puede simplificar ligeramente utilizando el operador de multiplicación de matrices recientemente agregado @
:
A = A @ RT
Además, puede organizar la transformación en la forma estándar (matriz de rotación primero) tomando la transposición de A
antes de la multiplicación, y luego transponiendo el resultado:
A = (R @ AT).T
Puede verificar que ambas formas de la transformación produzcan los mismos resultados a través de la siguiente afirmación:
np.testing.assert_array_equal((R @ AT).T, A @ RT)