Optimize code without for loop

조회 수: 3 (최근 30일)
Marc Servagent
Marc Servagent 2023년 7월 31일
이동: Stephen23 2024년 9월 26일
My code uses 6 nested for loops, it is basically used to build 3D matrix with data in specific order from 2D matrix with data in random order.
These lines work as expected but take significant times to execute.
Is there any alternative approach of programming which lead to avoid all these for loops and therefore speed up the execution ?
for z=1:1001
p=0;
for j=1:length(DOFNameRef)
for n=1:length(DOFDir)
for i=1:length(DOFNamePoint)
for l=1:length(DOFDir)
p = p+1;
for k=1:Mlig*Mcol
c(k) = contains(Resp(k),DOFNamePoint(i)) && contains(Resp(k),DOFDir(l)) && contains(Ref(k), DOFNameRef(j)) && contains(Ref(k),DOFDir(n));
end
[NumLigne, NumCol] = NLignNCol(p,Mlig, Mcol);
M(NumLigne,NumCol,z) = Data(z, c);
end
end
end
end
end

채택된 답변

Abhinaya Kennedy
Abhinaya Kennedy 2024년 9월 24일
You can consider:
  • Vectorization: Try to replace loops with vectorized operations. Eg., you can use logical indexing instead of the contains function inside the innermost loop.
  • Preallocation: Preallocate all matrices and arrays before the loops. This avoids dynamically resizing arrays, which is computationally expensive.
  • Parallel Computing: If you have the Parallel Computing Toolbox, you can use parfor to parallelize the outer loops.
  • Logical Indexing: Instead of using nested loops to find elements that meet certain conditions, use logical indexing.
  댓글 수: 1
Marc Servagent
Marc Servagent 2024년 9월 26일
이동: Stephen23 2024년 9월 26일
Thanks,
the vectorization helped to sigificantly improve the situation.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

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

제품


릴리스

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by