How to count time steps
23 ビュー (過去 30 日間)
古いコメントを表示
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
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?
採用された回答
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
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?
その他の回答 (1 件)
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.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Third-Party Cluster Configuration についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!