MATLAB Answers

Cost matrix from an array without for loop.

5 views (last 30 days)
daniel adams
daniel adams on 29 Sep 2021
Edited: the cyclist on 29 Sep 2021
Hi I want to create a matrix with entries the absolute value between each point in an array.
My array is called domain, and it has length grid_number.
I have done this in the below code, however I have used a for loop. It takes a long time to run when grid_number is large. Is there a neat way to do this?
for i=1:grid_number
for j=1:grid_number
cost(i,j)=abs(domain(i)-domain(j))
end
end

Accepted Answer

the cyclist
the cyclist on 29 Sep 2021
Edited: the cyclist on 29 Sep 2021
You can use implicit expansion to subtract the two vector from each other, by transposing one of them.
cost = abs(domain-domain.');
If you have an older version of MATLAB, that does not support implicit expansion, you can use
cost = abs(bsxfun(@minus,domain,domain'));

More Answers (1)

Matt J
Matt J on 29 Sep 2021
Edited: Matt J on 29 Sep 2021
cost=abs( domain(:)-domain(:).' );

Community Treasure Hunt

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

Start Hunting!

Translated by