MATLAB: Matrix operation without for-loop

avoid for loop

Hello,
I have a position vector q=[x y z].' I want to compute the following: Q=q*q.' . The dimension of Q is 3×3 . I'd like to do this operation for multiple position vectors at once, say q1=[x1 y1 z1] and q2=[x2 y2 z2], resulting in a Q1 and Q2 matrix. The outcome may be a 3D matrix, in this case with dimension 3x3x2. Is there a way to this without using a for-loop? Thanks in advance.
Jeroen

Best Answer

q = reshape(1:6,[],2); % let your vectors as [q1,q2]
s = size(q,1);
Q = bsxfun(@times,reshape(q,s,1,[]),reshape(q,1,s,[]));
or
qq = repmat(permute(q,[1 3 2]),1,s);
Q = qq.*permute(qq,[2 1 3]);