Apply function on several matrices without for loop

조회 수: 10 (최근 30일)
Guillaume
Guillaume 2017년 10월 9일
댓글: Guillaume 2017년 10월 9일
Hi all,
I have hundred 3x3 rotation matrices stored in a 100x9 matrix. I would like to compute the corresponding rotation vectors using the Rodrigues convention. The desired output would be a 100x3 matrix.
Currently, I have written a function with a for loop that reads the 9 parameters of each rotation matrix line by line and fills in the corresponding rotation vector line by line.
function [rot_vectors] = rotationMatricesToVectors(rot_matrices)
nb_rotations = size(rot_matrices,1);
rot_vectors = zeros(nb_rotations,3);
for i = 1:nb_rotations
R = [...
rot_matrices(i,1) rot_matrices(i,2) rot_matrices(i,3);
rot_matrices(i,4) rot_matrices(i,5) rot_matrices(i,6);
rot_matrices(i,7) rot_matrices(i,8) rot_matrices(i,9)];
rot_vectors(i,:) = rotationMatrixToVector(R);
end
end
I was wondering if there is a more elegant way to write this function, in particular to avoid the for loop.
Thank you!
Guillaume
  댓글 수: 4
Matt J
Matt J 2017년 10월 9일
@Guillaume2,
Good point, although I don't think the transposition should matter, ultimately. The rotation axes are the same both for a rotation matrix R and its transpose.
Guillaume
Guillaume 2017년 10월 9일
Hi Matt, Guillaume,
Thanks for the comments! As you suggested, I am going to change the indexing (column by column instead of row by row).
rotationMatrixToVector is actually a built-in function:
https://fr.mathworks.com/help/vision/ref/rotationmatrixtovector.html

댓글을 달려면 로그인하십시오.

답변 (1개)

Matt J
Matt J 2017년 10월 9일
편집: Matt J 2017년 10월 9일
I doubt this will be faster than a for loop, but it does get rid of it.
function [rot_vectors] = rotationMatricesToVectors(rot_matrices)
nb_rotations = size(rot_matrices,1);
Rstack=reshape(rot_matrices.',3,3,[]);
K=kron(speye(nb_rotations),ones(3));
K(K>0)=Rstack(:);
[v,~]=eigs(K,1);
rot_vectors=reshape(v,3,[]).';

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by