Sort elements of Array by given condition

3 visualizaciones (últimos 30 días)
Daniel
Daniel el 28 de Dic. de 2022
Editada: Matt J el 28 de Dic. de 2022
Hello,
i have a vector n 480x1 and would like to sort the vector so that the condition
sum(([n ;0]-[0 ;n])>0)==68
is given. How could i do this? my approach was to realize a permutation of the vector until the condition is given. Unfortnely, this takes too much time.
Thanks in advance
  5 comentarios
Daniel
Daniel el 28 de Dic. de 2022
There is the data. Thanks a lot!
Torsten
Torsten el 28 de Dic. de 2022
Editada: Torsten el 28 de Dic. de 2022
For that there are 68 pairs such that
n(i+1) - n(i) > 0, n(0) = 0 (i=0,...,67)
your array must have at least 68 different elements.
Yours has only 27.

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 28 de Dic. de 2022
Editada: Matt J el 28 de Dic. de 2022
n=load('vector').xr;
m=numel(n);
n=n(randperm(m));
loc=find(([n ;0]-[0 ;n])>0);
n(loc(68):end)=sort(n(loc(68):end),'descend');
sum(([n ;0]-[0 ;n])>0)
ans = 68

Más respuestas (1)

Sulaymon Eshkabilov
Sulaymon Eshkabilov el 28 de Dic. de 2022
load('vector.mat')
XR1 = [xr;0]; XR2 = [0;xr];
IND = (XR1-XR2)>0;
ii = 1;
S = 0;
while S~=68
S(ii+1) = S(ii)+IND(ii);
ii=ii+1;
end
fprintf('Summation is halted at %d step and the sum is %d \n', ii, S(ii))
Summation is halted at 226 step and the sum is 68

Categorías

Más información sobre Shifting and Sorting Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by