MATLAB Answers

0

How to cite the row of the matrix by vectorization?

Asked by wei zhang on 3 Sep 2019
Latest activity Commented on by wei zhang on 4 Sep 2019
Hi,
I have a problem in speeding my code. In my code, there is a step as below,
a=repmat(1:6,3,1)';
index=[1:3;2:4];
result=zeros(3,3,size(index,1));
for i=1:size(index,1)
result(:,:,i)=a(index(i,:),:)
end
In practice, the matrix a and index are very large n*3 matrix. a is the node coordinates and the index is the triangle face index of the node. The surface is too big. So I really need to speed this loop. I have an idea that vectorization could make the code faster. But I could not get the ideal output result, even with some matrix "resize" or matrix rotation functions, like "resize" or "reshape". I am very thankful for any suggestion.

  0 Comments

Sign in to comment.

Products


Release

R2019a

1 Answer

Answer by Andrei Bobrov
on 3 Sep 2019
Edited by Andrei Bobrov
on 3 Sep 2019
 Accepted Answer

For large matrices, the cycle may be faster.
a = repmat(1:6,3,1)';
index = [1:3;2:4];
si = size(index);
result = permute(reshape(a(index',:),si(2),si(1),[]),[1,3,2]);

  1 Comment

Thank you for your answer!
I just record the speed comparision here for others. My 'a' matrix is 188802*3, and 'index' is 377644*3. The time with the previous loop is approximately 0.9 s; the time use this answer is 0.08s. The vectorization method is obviously much faster.

Sign in to comment.