How to speed up this calculation and remove loop(s)?

2 views (last 30 days)
Hello,
I have a table oFD that 10450x27 in size. I am trying to optimize this double loop to speed up the processing. For whatever reason, I'm drawing a blank how to optimize and am sure if can be computed more efficiently.
sPs = [3500:5000]';
CGE = zeros(size(sPs,1),1);
for row = 1:size(oFD,1)
for m = 1:size(sPs,1)
CG = my_function(sPs(m),oFD.PS(row),oFD.dTE(row),oFD.CIV(row));
CG2(row,m) = oFD.COI(row)*sPs(m)^2*CG;
end
end
Would someone please be able to help?
Thank you in advance!
  3 Comments
Daulton_Benesuave
Daulton_Benesuave on 30 Sep 2022
Sorry for the late reply, had to attend to same family matters yesterday afternoon.
size(oFD,1) = 10500x27
size(sPs,1) = 1797x1

Sign in to comment.

Accepted Answer

Jan
Jan on 29 Sep 2022
There is a very small potential for optimizing in the posted code:
for row = 1:size(oFD,1)
c1 = oFD.PS(row);
c2 = oFD.dTE(row);
c3 = oFD.CIV(row);
c4 = oFD.COI(row);
for m = 1:size(sPs,1)
CG = my_function(sPs(m), c1, c2, c3);
CG2(row,m) = c4 * sPs(m)^2 * CG;
end
end
I assume, the main time is spent in my_function. The profiler would reveal this.
If you post the code of my_function, further improvements are possible.
  5 Comments
Jan
Jan on 29 Sep 2022
I do not have the Financial Toolbox. So this is a dumb guess only:
for row = 1:size(oFD,1)
c1 = oFD.PS(row);
c2 = oFD.dTE(row);
c3 = oFD.CIV(row);
c4 = oFD.COI(row);
CG = my_function(sPs, c1, c2, c3);
CG2(row, :) = c4 * sPs.^2 .* CG;
end
So can you call my_function with a vector as 1st input?

Sign in to comment.

More Answers (0)

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by