Cost matrix from an array without for loop.

1 Ansicht (letzte 30 Tage)
daniel adams
daniel adams am 29 Sep. 2021
Bearbeitet: the cyclist am 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

Akzeptierte Antwort

the cyclist
the cyclist am 29 Sep. 2021
Bearbeitet: the cyclist am 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'));

Weitere Antworten (1)

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

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by