Azzera filtri
Azzera filtri

help with inefficient code

1 visualizzazione (ultimi 30 giorni)
sani
sani il 19 Gen 2020
Commentato: Les Beckham il 21 Gen 2020
Hi, I have those lines in my script that they purpuse is to fix jumps in a clock (it runs on a table). for instance this is the data:
1913834560
1993310708
177158681 + 1993310708
270995495 + 1993310708
2036984230 + 1993310708
2057526148 + 1993310708
2064917157 + 1993310708
2089319288 + 1993310708
6799572 +2089319288 + 1993310708
13663870 +2089319288 + 1993310708
in this case the jump is in the bolt line and the correction will be to add the bolt value to all the later values until the next jump (as sown in the bold summing), and so on.
I write this code, but it takes forever to run on ~500K lines, any ideas to improve it?
thanks!
prev = 0; %time linearity
sum = 0;
for i = 2:height(T1(:,1))
if prev > T1.time(i)
sum = sum + prev;
end
prev = T1.time(i);
T1.time(i) = T1.time(i)+sum;
end

Risposta accettata

Les Beckham
Les Beckham il 19 Gen 2020
Modificato: Les Beckham il 19 Gen 2020
Try this.
There may be a more efficient approach but I'm pretty sure this will be faster than what you have now.
T1.time = [
1913834560
1993310708
177158681
270995495
2036984230
2057526148
2064917157
2089319288
6799572
13663870 ];
del = diff(T1.time);
idx = find(del<0);
sum = zeros(size(T1.time));
for i=1:length(idx)
sum(idx(i)+1:end) = sum(idx(i)+1:end) + T1.time(idx(i)-1);
end
T1.time_adjusted = T1.time + sum;
% plot to visualize results
plot(1:length(T1.time), T1.time, 1:length(T1.time), T1.time_adjusted)
grid on
  2 Commenti
sani
sani il 19 Gen 2020
thanks! it run much faster than before!
Les Beckham
Les Beckham il 21 Gen 2020
You are welcome. Glad that it helped.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by