Cost matrix from an array without for loop.

1 visualización (últimos 30 días)
daniel adams
daniel adams el 29 de Sept. de 2021
Editada: the cyclist el 29 de Sept. de 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

Respuesta aceptada

the cyclist
the cyclist el 29 de Sept. de 2021
Editada: the cyclist el 29 de Sept. de 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'));

Más respuestas (1)

Matt J
Matt J el 29 de Sept. de 2021
Editada: Matt J el 29 de Sept. de 2021
cost=abs( domain(:)-domain(:).' );

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by