Remove the need for nested for loop
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Jack Hillyer
le 11 Jan 2019
Commenté : Star Strider
le 12 Jan 2019
Hi, so I have a vector and I am trying to create a matrix containing the difference between the vector elements. I am currently using a nested for loop, but need to speed it up (the vector has 9000 elements). Is there any way of doing this?
I have a vector a
b=length(a);
for i=1:b
for j=i+1:b
da=a(i)-a(j);
end
end
da=da+da';
0 commentaires
Réponse acceptée
Star Strider
le 11 Jan 2019
I am not certain of the result you want.
Try this:
a = randi(9, 1, 5); % Create Vector
da = bsxfun(@minus, a(1:end-1), a(2:end)'); % Matris Of Differences
2 commentaires
Star Strider
le 12 Jan 2019
My pleasure!
The example definitely helps.
A slight revision of my previous code:
a = [1 2 3];
da = bsxfun(@minus, a, a') % Matrix Of Differences
produces:
da =
0 1 2
-1 0 1
-2 -1 0
that appears to be the desired result.
Plus de réponses (1)
Kevin Phung
le 12 Jan 2019
Modifié(e) : Kevin Phung
le 12 Jan 2019
a = [1 2 3];
da = zeros(numel(a));
for i = 1:numel(a)
da(:,i) =a(i) - a
end
You will save the program some time by predefining the size of da before the loop instead of constantly adding columns to it.
Hope this helps
0 commentaires
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!