Cost matrix from an array without for loop.

조회 수: 1 (최근 30일)
daniel adams
daniel adams 2021년 9월 29일
편집: the cyclist 2021년 9월 29일
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

채택된 답변

the cyclist
the cyclist 2021년 9월 29일
편집: the cyclist 2021년 9월 29일
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'));

추가 답변 (1개)

Matt J
Matt J 2021년 9월 29일
편집: Matt J 2021년 9월 29일
cost=abs( domain(:)-domain(:).' );

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by