フィルターのクリア

Find datapoints a specified distance apart in matrix using while loop

1 回表示 (過去 30 日間)
Emu
Emu 2023 年 3 月 27 日
コメント済み: Emu 2023 年 3 月 27 日
I have some data with positive integers (to_pos). I want to find and extract into a second matrix (spacedCrossPoints) datapoints that are a minimum of 30 from each other. So my desired output would be: 1214,2263,2320,8262,8292....
Here is my not working code so far:
gapBetweenCrosses = 30;
for cross = 2:length(t0_pos)-1;
i = cross;
if (((t0_pos(cross+1))-(t0_pos(i))) >= gapBetweenCrosses)% && (cross < ((length(t0_pos))-30)); %if gap between row greater than or equal to 30(s)
spacedCrossPoints(end+1,1) = t0_pos(cross+1); %insert values of crosspoints into matrix
elseif ((t0_pos(cross+1))) - (t0_pos(i)) < gapBetweenCrosses %&& cross < (length(t0_pos))-30; %if gap is less than 30. skips
%jump = 30-(((t0_pos(cross+1))) - (t0_pos(cross))); %calculate jump as difference between 30 and different between rows
while ((t0_pos(cross+1))) - (t0_pos(i)) < gapBetweenCrosses
cross = cross+1;
%spacedCrossPoints(end+1,1) = t0_pos(cross+1); %notes new value 30 past last value %NEED TO MAKE CROSS NOT EXCEED length t0_pos
end
end
cross = cross+1;
end
end
  2 件のコメント
Dyuman Joshi
Dyuman Joshi 2023 年 3 月 27 日
"I want to find and extract into a second matrix (spacedCrossPoints) datapoints that are a minimum of 30 from each other."
How does the above statement relate to this - "So my desired output would be: 1214,2263,2320,8262,8292...."
Do you want to obtain all the pair of points whose difference is >= gap?
Emu
Emu 2023 年 3 月 27 日
In the attached dataset the datapoints that are 30 or more points from each other are as specified: 1214,2263,2320,8262,8292... They are not pairs.

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

採用された回答

Dyuman Joshi
Dyuman Joshi 2023 年 3 月 27 日
編集済み: Dyuman Joshi 2023 年 3 月 27 日
Points which are >= 30 than the previous point starting with the 1st point -
load t0_pos.mat
gap=30;
k=1;
y=false(size(t0_pos));
y(k)=true;
%loop
while k<numel(t0_pos)
k=find(t0_pos - t0_pos(k) >= gap, 1);
y(k)=true;
end
out = t0_pos(y)'
out = 1×34
1214 2263 2320 8262 8292 8322 8434 8480 9014 9090 9149 9179 9215 14848 14904 15106 15149 15207 15372 15443 16330 16671 16708 20532 20590 20757 20809 23325 23355 23385
  3 件のコメント
Dyuman Joshi
Dyuman Joshi 2023 年 3 月 27 日
I have edited my answer, please check again.
Emu
Emu 2023 年 3 月 27 日
that is amazing :) thank you so much !!

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by