Finding the "center integers" of an array

1 回表示 (過去 30 日間)
Ben
Ben 2015 年 5 月 25 日
回答済み: Alfonso Nieto-Castanon 2015 年 5 月 25 日
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.

採用された回答

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

その他の回答 (2 件)

Alfonso Nieto-Castanon
Alfonso Nieto-Castanon 2015 年 5 月 25 日
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 2015 年 5 月 25 日
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))));

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by