Calculating time differences
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello, I have data which look like this:
t = [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...19 20 21 22 23 24 25...29 30 31 32 33 34 35 36 37 38 39 40...]
x = [ 5 5 5 5 5 5 5 5 5 4 3 3 4 4...4 3 2 2 3 4 5...5 4 4 4 4 5 5 5 5 5 5 4...]
where t is time in seconds and x represents values for each second. There is over 1000 time points and corresponding values in my data. Every 10s, values start to decrease and then go up again. I'd like to calculate the time difference between each the 10s points (10s, 20s, 30s etc.) and the time where the values starts to increase and save it(the time difference) in a vector form. The interesting points in the example above are in bold for better understanding of the problem. For given data the vector will be v=[3 3 4 ...]
Thanks in advance
Akzeptierte Antwort
Jan
am 11 Apr. 2012
Let's start with a loop:
x = [5 5 5 5 5 5 5 5 5 4 3 3 4 4 4 4 4 4 4 3 ...
2 2 3 4 5 5 5 5 5 4 4 4 4 5 5 5 5 5 5 4];
x = reshape(x, 10, []);
n = size(x, 2);
v = zeros(1, n);
vi = 0;
for i = 1:n
p = find(diff(x(:, i)) > 0, 1);
if ~isempty(p)
vi = vi + 1;
v(vi) = p + 1;
end
end
v = v(1:vi);
Does this solve the problem correctly? Is the speed acceptable?
Weitere Antworten (1)
Jan
am 11 Apr. 2012
p = find(diff(x) > 0);
v = rem(p, 10);
Perhaps some fine-tuning is required. E.g. I assume you need to add 1 to the results.
[EDITED] Or:
y = reshape(x, 10, []);
[row, col] = find(diff(x) > 0, 1); % WRONG!
v = rem(col, 10);
Or:
p = find(diff(x) > 0);
p(rem(p, 10) == 0) = []; % Remove multiples of 10
v = rem(p, 10);
Again: I cannot test this currently.
4 Kommentare
Jan
am 11 Apr. 2012
I'll take a look on the problem in the later evening, when I have access to Matlab - if it is not solved already.
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!