MATLAB Answers

How to cite the row of the matrix by vectorization?

1 view (last 30 days)
wei zhang
wei zhang on 3 Sep 2019
Commented: wei zhang on 4 Sep 2019
I have a problem in speeding my code. In my code, there is a step as below,
for i=1:size(index,1)
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.


Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 3 Sep 2019
Edited: Andrei Bobrov on 3 Sep 2019
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

wei zhang
wei zhang on 4 Sep 2019
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.

More Answers (0)




Translated by