MATLAB: Simple for loop efficiency

for loopMATLABspeed

Hello, this is my first post here. Currently I am working on a script that should recalculate the column numbers as following:
firstvalue = table{1,1};
i = 1;
height = height(table);
for i = 1:height
x = table{i,1};
table{i,1} = (x-firstvalue)/fs*1000;
i = i+1;
end
This loop does what I want, but is terribly slow. Is there a way to make this loop execute faster? The loop works in the table with around 50.000 rows. I think the loop could be more efficient but don't know how.
Thank you!

Best Answer

How about doing this.
table{:,1} = (table{:,1}-table{1,1})/fs*1000;
And let's check the calculation time.
fs = 100;
table1 = array2table(rand(1000,2));
table2 = table1;
% Slightly modified original code
tic
firstvalue = table1{1,1};
i = 1;
n = height(table1);
for i = 1:n
x = table1{i,1};
table1{i,1} = (x-firstvalue)/fs*1000;
end
toc
% Proposed code
tic
table2{:,1} = (table2{:,1}-table2{1,1})/fs*1000;
toc
% Check the answer
isequal(table1, table2)
In my PC, the result is 0.131066 sec -> 0.003073 sec and table2 is the same as table1.
Related Question