Remove the need for nested for loop

조회 수: 3 (최근 30일)
Jack Hillyer
Jack Hillyer 2019년 1월 11일
댓글: Star Strider 2019년 1월 12일
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';

채택된 답변

Star Strider
Star Strider 2019년 1월 11일
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
Jack Hillyer
Jack Hillyer 2019년 1월 11일
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 2019년 1월 12일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Kevin Phung
Kevin Phung 2019년 1월 12일
편집: Kevin Phung 2019년 1월 12일
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

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by