Finding the "center integers" of an array

1 view (last 30 days)
Consider the input vector:
[1 2 3 10 11 12 15 16 17 20 21 22 23 24 30]'
Let's group the elements of the input vector in the following manner:
[1 2 3] [10 11 12] [15 16 17] [20 21 22 23 24] [30] (This is not part of the output)
Then the desired output is the center integer of these "groupings":
[2 11 16 22 30]
Is there a quick and easy way to do this with only a few functions? (Preferably without a for-loop). Let's assume these integer "groupings" contain an odd number of elements so there is always one center integer.
I have no starting code unfortunately. I considered using the diff command, but I got stuck from there.
Let me know if I need to clarify anything. Thank you for your help.

Accepted Answer

Walter Roberson
Walter Roberson on 25 May 2015
t = find([true, diff(X)>1, true]);
Output = X((t(1:end-1) + t(2:end)-1)/2);

More Answers (2)

Alfonso Nieto-Castanon
Alfonso Nieto-Castanon on 25 May 2015
x = [1 2 3 10 11 12 15 16 17 20 21 22 23 24 30];
y = x(floor(convn(find(diff([nan x nan])~=1),[1 1]/2,'valid')));

Alfonso Nieto-Castanon
Alfonso Nieto-Castanon on 25 May 2015
x = [1 2 3 10 11 12 15 16 17 20 21 22 23 24 30];
y = cellfun(@mean,mat2cell(x, 1, diff(find(diff([nan x nan])~=1))));

Community Treasure Hunt

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

Start Hunting!