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

1 Ansicht (letzte 30 Tage)
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!

Akzeptierte Antwort

Star Strider
Star Strider am 7 Mär. 2022
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 Kommentare
Anna B.
Anna B. am 7 Mär. 2022
Bearbeitet: Anna B. am 7 Mär. 2022
Thank you very much for the quiсk response. I have tried both variants and it works perfectly!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Jan
Jan am 7 Mär. 2022
Bearbeitet: Jan am 7 Mär. 2022
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 Kommentar
Anna B.
Anna B. am 7 Mär. 2022
Bearbeitet: Anna B. am 7 Mär. 2022
Thank you very much for the quick response. I have tried both variants and it works perfectly!

Melden Sie sich an, um zu kommentieren.

Produkte


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by