Finding the "center integers" of an array
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ben
el 25 de Mayo de 2015
Respondida: Alfonso Nieto-Castanon
el 25 de Mayo de 2015
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.
0 comentarios
Respuesta aceptada
Walter Roberson
el 25 de Mayo de 2015
t = find([true, diff(X)>1, true]);
Output = X((t(1:end-1) + t(2:end)-1)/2);
0 comentarios
Más respuestas (2)
Alfonso Nieto-Castanon
el 25 de Mayo de 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')));
0 comentarios
Alfonso Nieto-Castanon
el 25 de Mayo de 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))));
0 comentarios
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!