Cost matrix from an array without for loop.

1 view (last 30 days)
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(:).' );

Categories

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

Community Treasure Hunt

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

Start Hunting!