How to vectorize a for loop with array multiplication?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Erin Pratt
am 23 Jun. 2021
Kommentiert: Erin Pratt
am 23 Jun. 2021
Please help on replacing:
for i=1:Nm
Sloctemp(i,:,:)=Sloctemp(i,:,:)*Sort(m,i);
end
Where Nm = 19 Sloctemp is a 30x6x6 matrix, Sort is a 524288x19 matrix m=1
Sort is populated with only 0 or ones, so I am just trying to multiply Sloctemp(1:19,:,:) by either 1 or 0.
I tried:
i=1:Nm;
Sloctemp(i,:,:)=Sort(m,i).*Sloctemp(i,:,:);
but get the "Array dimensions must match for binary array op." error.
This section of the code gets run tens of millions of times, so I am just trying to get the fastes solution.
Thank you!
0 Kommentare
Akzeptierte Antwort
Jan
am 23 Jun. 2021
Bearbeitet: Jan
am 23 Jun. 2021
Prefer to post the examples such, that they can be started by copy&paste.
Nm = 19;
Sloctemp = rand(30, 6, 6);
Sort = rand(524288, 19);
m = 1;
Result = Sloctemp;
Result(1:19, :, :) = Sloctemp(1:19, :, :) .* Sort(m, 1:19).';
% Compare with original version:
for i = 1:Nm
Sloctemp(i, :, :) = Sloctemp(i, :, :) * Sort(m, i);
end
max(abs(Result - Sloctemp), [], 'all')
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Shifting and Sorting Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!