Finding series of values within array

2 ビュー (過去 30 日間)
Oscar
Oscar 2015 年 11 月 18 日
編集済み: Stephen23 2016 年 1 月 12 日
Hi, I am up for a problem which I cannot totally solve.
Imagine I have an array:
testtimes=[0.2 1.2 1.202 1.205 1.209 1.8 2.1 2.6 2.604 2.606 3.601 3.603 3.605];
Now I need to find all series of values where the difference between values is less than 0.01. So for now I did this:
% reference = 0.01
% isitesttimes=diff(testtimes); belowBIthreshold=(isitesttimes<reference);
% belowBIthreshold = [false, belowBIthreshold, false];
% edges = diff(belowBIthreshold);
% rising = find(edges==1); falling = find(edges==-1); spanWidth = falling - rising; wideEnough = spanWidth >= 3;
% startPos = rising(wideEnough);
% endPos = falling(wideEnough)-1;
% allInSpan = cell2mat(arrayfun(@(x,y) x:1:y, startPos, endPos, 'uni', false))
However, the answer now is
allInSpan = 2 3 4
Which means that on position 2,3,4 in testtimes the values are postioned which have a difference less than 0.01. However, the correct answer in this example would be 2,3,4,5 (since also position 5 has a difference of less than 0.01 compared to the one on position 4) (apart from that 8,9,10,11,12,13 should also be in the answer but that has to do (I guess) with the cut-off/Span-Width of 3).
Can somebody help me out?
Regards
  1 件のコメント
Sivakumaran Chandrasekaran
Sivakumaran Chandrasekaran 2016 年 1 月 12 日
use the command find

サインインしてコメントする。

回答 (1 件)

Stephen23
Stephen23 2016 年 1 月 12 日
編集済み: Stephen23 2016 年 1 月 12 日
There is no need to use find when logical indexing is much faster. The following code extracts all values from X where the difference with an adjacent element is less than R:
>> V = [0.2,1.2,1.202,1.205,1.209,1.8,2.1,2.6,2.604,2.606,3.601,3.603,3.605];
>> R = 0.01;
>> D = diff(V)<R;
>> X = [false,D] | [D,false];
>> V(X)
ans =
1.2000 1.2020 1.2050 1.2090 2.6000 2.6040 2.6060 3.6010 3.6030 3.6050
But of course you can still use find if you need to:
>> find(X)
ans =
2 3 4 5 8 9 10 11 12 13

カテゴリ

Help Center および File ExchangeGraphics Object Programming についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by