How to count time steps

조회 수: 21 (최근 30일)
Karoline Qasem
Karoline Qasem 2017년 1월 8일
댓글: Karoline Qasem 2017년 1월 10일
Hi, I have X has several numbers inside say: X = [1 4 5 3 2 7 8 4 6 9 3 2 8 5 3 10] I want to first to select the values where X falls below 4, then need to count how many time steps does it take each one to go above 8.
Hope I am clear Thanks
  댓글 수: 2
Image Analyst
Image Analyst 2017년 1월 8일
편집: Image Analyst 2017년 1월 8일
So it first goes above 4 at element 3 (where it's 5). Then to go from 5 to 9 (the first time it goes above 8) is 7 steps. Then it goes above 4 at element 14 (where it's 5) then it's 3 steps to get to 10. So is the answer [7, 3]? Or are your rules different than that?
What is the reason why you want this quirky thing?
Karoline Qasem
Karoline Qasem 2017년 1월 9일
It is slightly different, I am looking at values of dissolved oxygen in water, at some time of the year, it goes BELOW 4 mg/L and it takes couple of days to go to 8 mg/L. My question is how many days does it need to go back from a threshold value (any value less than 4) to reach 8 mg/L
So the only thing not correct in your explanation is that I am looking at values less than 4 not above it. So, looking at the example: the first value below 4 is the first element which is 1, it needs 6 time steps to get to 8.
now moving after that number 4 (the one after 8) it needs two time steps to get to the 9.
etc
Thanks for the comment

댓글을 달려면 로그인하십시오.

채택된 답변

Image Analyst
Image Analyst 2017년 1월 9일
I imagine you've already modified by solution for your updated/clarified question. But anyway, here is the code:
% Define vector.
x = [1 4 5 3 2 7 8 4 6 9 3 2 8 5 3 10]
% Plot it.
plot(x, 'b*-', 'LineWidth', 2, 'MarkerSize', 13)
grid on;
hold on;
line(xlim, [4,4], 'Color', 'r', 'LineWidth', 2);
% Do the scan.
startingIndex = 1;
loopcounter = 1;
while startingIndex < length(x)
subvector = x(startingIndex:end);
% Find where it goes below 4 next. Note ABOVE, not above or equal to.
nextBelow4Index = find(subvector < 4, 1, 'first') + startingIndex - 1;
% Find where it goes above 8 next. Note ABOVE, not above or equal to.
subvector2 = x((nextBelow4Index+1):end);
% Count the number of steps for that to happen.
numSteps(loopcounter) = find(subvector2 >= 8, 1, 'first');
% Move to the next index past the one that exceeded 8.
startingIndex = nextBelow4Index + numSteps(loopcounter) + 1;
loopcounter = loopcounter + 1;
end
numSteps % Report results to command window.
Answer is [6,2,1]
  댓글 수: 6
Image Analyst
Image Analyst 2017년 1월 9일
That is a file with lots of columns, many of which have gaps in them. How did you read it in (please give your code)? What column or part of a column was the "X" vector?
Karoline Qasem
Karoline Qasem 2017년 1월 10일
its the whole column 6, I am attaching it again with it only
thanks

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Image Analyst
Image Analyst 2017년 1월 8일
편집: Image Analyst 2017년 1월 8일
Try this:
% Define vector.
x = [1 4 5 3 2 7 8 4 6 9 3 2 8 5 3 10]
% Plot it.
plot(x, 'b*-', 'LineWidth', 2, 'MarkerSize', 13)
grid on;
hold on;
line(xlim, [4,4], 'Color', 'r', 'LineWidth', 2);
% Do the scan.
startingIndex = 1;
loopcounter = 1;
while startingIndex < length(x)
subvector = x(startingIndex:end);
% Find where it goes above 4 next. Note ABOVE, not above or equal to.
nextAbove4Index = find(subvector > 4, 1, 'first') + startingIndex - 1;
% Find where it goes above 8 next. Note ABOVE, not above or equal to.
nextAbove8Index = find(subvector > 8, 1, 'first') + startingIndex - 1;
% Count the number of steps for that to happen.
numSteps(loopcounter) = nextAbove8Index - nextAbove4Index;
% Move to the next index past the one that exceeded 8.
startingIndex = nextAbove8Index + 1;
loopcounter = loopcounter + 1;
end
numSteps % Report results to command window.
The result is [7, 3] as expected.

카테고리

Help CenterFile Exchange에서 Third-Party Cluster Configuration에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by