How can I split measured data in separate vectors, depending on sign value?

1 回表示 (過去 30 日間)
Anna B.
Anna B. 2022 年 3 月 7 日
コメント済み: Star Strider 2022 年 3 月 7 日
Hello! Is it possible to split measured data f.e.v= [1 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1] in separate vectors, f.e. only the 'growing' values: v1=[1 2 3 4 5], v2=[1 2 3 4 5].
Maybe with a find(sign(diff(v))==1) ?
Thank you!

採用された回答

Star Strider
Star Strider 2022 年 3 月 7 日
One approach —
v= [1 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1];
dv = gradient(v);
sel = v(dv>=0);
dsel = diff([1 find(diff([sel(1) sel])<0) numel(sel)+1]);
C = mat2cell(sel, size(sel,1), dsel)
C = 1×2 cell array
{[1 2 3 4 5]} {[1 2 3 4 5]}
v1 = C{1}
v1 = 1×5
1 2 3 4 5
v2 = C{2}
v2 = 1×5
1 2 3 4 5
.
  2 件のコメント
Anna B.
Anna B. 2022 年 3 月 7 日
編集済み: Anna B. 2022 年 3 月 7 日
Thank you very much for the quiсk response. I have tried both variants and it works perfectly!
Star Strider
Star Strider 2022 年 3 月 7 日
As always, my pleasure!

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

その他の回答 (1 件)

Jan
Jan 2022 年 3 月 7 日
編集済み: Jan 2022 年 3 月 7 日
Start with a simple loop approach:
v = [1 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1];
dv = [false, diff(v) > 0, false];
ini = strfind(dv, [false, true]);
fin = strfind(dv, [true, false]);
C = cell(1, numel(ini));
for iC = 1:numel(ini)
C{iC} = v(ini(iC):fin(iC));
end
C
C = 1×2 cell array
{[1 2 3 4 5]} {[1 2 3 4 5]}
  1 件のコメント
Anna B.
Anna B. 2022 年 3 月 7 日
編集済み: Anna B. 2022 年 3 月 7 日
Thank you very much for the quick response. I have tried both variants and it works perfectly!

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

カテゴリ

Help Center および File ExchangeMultirate Signal Processing についてさらに検索

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by