Split array into sub arrays and apply function

4 visualizaciones (últimos 30 días)
Priscilla
Priscilla el 15 de Jul. de 2020
Comentada: Priscilla el 15 de Jul. de 2020
Hi everyone,
I am using findpeaks to detect peaks in my data and would like to create a sub arrays everytime a peak is detected and then apply a function to the sub arrays for example
If
x = [0.2954 0.0861 -0.0204 0.0046 0.2297 0.7651 -0.4482 -1.2974 0.3673 -0.7759 0.5676 1.0851 0.4082 0.3364 -0.3396 -0.1935 0.5228]
Peaks = [0.7651 0.5676 0.5228]
expected output / sub arrays = [{0.2954 0.0861 -0.0204 0.0046 0.2297 0.7651} {-0.4482 -1.2974 0.3673 -0.7759 0.5676} {1.0851 0.4082 0.3364 -0.3396 -0.1935 0.5228}
Thanks in advance
Regards,
Abigail
  1 comentario
Stephen23
Stephen23 el 15 de Jul. de 2020
Editada: Stephen23 el 15 de Jul. de 2020
If you obtain findpeaks second output argument (the indices) your task will be a lot easier:

Iniciar sesión para comentar.

Respuesta aceptada

madhan ravi
madhan ravi el 15 de Jul. de 2020
[lo, ii] = ismember(PeakS, x);
ix = diff([0, ii(lo)]);
Output = mat2cell(x, 1, ix)
  2 comentarios
madhan ravi
madhan ravi el 15 de Jul. de 2020
As Stephen comments if you use the second output of findpeaks() you replace ii(lo) in my code with the second output of findpeaks().
Priscilla
Priscilla el 15 de Jul. de 2020
Thank you so much

Iniciar sesión para comentar.

Más respuestas (1)

Parth Dethaliya
Parth Dethaliya el 15 de Jul. de 2020
Editada: Parth Dethaliya el 15 de Jul. de 2020
x = [0.2954 0.0861 -0.0204 0.0046 0.2297 ...
0.7651 -0.4482 -1.2974 0.3673 -0.7759 ...
0.5676 1.0851 0.4082 0.3364 -0.3396 -0.1935 0.5228];
Peaks = [0.7651 0.5676 0.5228];
SubArray=cell(1,size(Peaks,2));
Init=1;
for i=1:size(Peaks,2)
SubArray{i} = x(Init:find(x==Peaks(i)));
Init = find(x==Peaks(i))+1;
end
Seems the code is self-explanatory, still comment if you have any queries.
Hope it helps!!

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by