How to cite the row of the matrix by vectorization?

1 Ansicht (letzte 30 Tage)
wei zhang
wei zhang am 3 Sep. 2019
Kommentiert: wei zhang am 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.

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 3 Sep. 2019
Bearbeitet: Andrei Bobrov am 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 Kommentar
wei zhang
wei zhang am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by