# how to speed my code up

1 view (last 30 days)
cglr on 16 Nov 2019
Commented: Daniel M on 17 Nov 2019
Hello everone,
Here, line 4 and 5 is called 5525575680 times and they last 280 and 230 seconds in order. May I speed it up, how can I use it more efficient ?
1 function [utilization] = totalUtilization(myArray, periodNumber, count, LPP)
2 duration = 0;
3 for i = 1:count
4 duration = duration + myArray(periodNumber, i);
5 end
6 utilization = duration / LPP;
7 end

#### 1 Comment

cglr on 16 Nov 2019
Because, I still can't get used to ability of MATLAB :) .
You are exactly true and no need to loop for sum or etc. I wrote the function taking into account to your comment:
utilization = sum(myArray(periodNumber,:)) / LPP;
Thank you so much.

Daniel M on 16 Nov 2019
Edited: Daniel M on 16 Nov 2019
Why do you need a loop to compute a sum? Just replace the entire function with
utilization = sum(myArray(periodNumber, 1:count)) / LPP;
And if count is equal to the number of columns of myArray, replace "1:count" with just ":" to avoid making an extra temporary index.
If periodNumber happens to be a vector, then include the number 2 as the dimension input into sum.

Show 1 older comment
Daniel M on 16 Nov 2019
What is table in this code? Is it an empty table using the table() function? https://www.mathworks.com/help/matlab/ref/table.html
Is it a table named table? Because you're not accessing any of its properties.
If it is a regular array then no need for a loop, just replace "i" with ":"
cglr on 17 Nov 2019
actually table is a regular array with the size (period,telCount). And I can ask the question in a better way as seen below:
x = zeros(period,1);
for i=1:period
x(i,1) = sum(table(i,1:telCount));
end
Here what I want is, sum all column for each row and write result to x array.
Daniel M on 17 Nov 2019
You really enjoy writing loops! But you don't need to. Look up the documentation for the sum function. It shows you how to do just that.