Remove the need for nested for loop
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
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 个评论
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
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
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!