Remove the need for nested for loop

3 views (last 30 days)
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';

Accepted Answer

Star Strider
Star Strider on 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 Comments
Jack Hillyer
Jack Hillyer on 11 Jan 2019
Hi, sorry for being vague, maybe I should have given an example.
If a= [1 2 3]'
da=[0 1 2; -1 0 1; -2 -1 0]
Thank you for the help!
Star Strider
Star Strider on 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.

Sign in to comment.

More Answers (1)

Kevin Phung
Kevin Phung on 12 Jan 2019
Edited: Kevin Phung on 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

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!