Split array into sub arrays and apply function

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 Comment

Stephen23
Stephen23 on 15 Jul 2020
Edited: Stephen23 on 15 Jul 2020
If you obtain findpeaks second output argument (the indices) your task will be a lot easier:

Sign in to comment.

 Accepted Answer

[lo, ii] = ismember(PeakS, x);
ix = diff([0, ii(lo)]);
Output = mat2cell(x, 1, ix)

2 Comments

As Stephen comments if you use the second output of findpeaks() you replace ii(lo) in my code with the second output of findpeaks().
Thank you so much

Sign in to comment.

More Answers (1)

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!!

Asked:

on 15 Jul 2020

Commented:

on 15 Jul 2020

Community Treasure Hunt

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

Start Hunting!