Cost matrix from an array without for loop.

1 vue (au cours des 30 derniers jours)
daniel adams
daniel adams le 29 Sep 2021
Modifié(e) : the cyclist le 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

Réponse acceptée

the cyclist
the cyclist le 29 Sep 2021
Modifié(e) : the cyclist le 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'));

Plus de réponses (1)

Matt J
Matt J le 29 Sep 2021
Modifié(e) : Matt J le 29 Sep 2021
cost=abs( domain(:)-domain(:).' );

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by