Azzera filtri
Azzera filtri

Sort elements of Array by given condition

4 visualizzazioni (ultimi 30 giorni)
Daniel
Daniel il 28 Dic 2022
Modificato: Matt J il 28 Dic 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 Commenti
Daniel
Daniel il 28 Dic 2022
There is the data. Thanks a lot!
Torsten
Torsten il 28 Dic 2022
Modificato: Torsten il 28 Dic 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.

Accedi per commentare.

Risposta accettata

Matt J
Matt J il 28 Dic 2022
Modificato: Matt J il 28 Dic 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

Più risposte (1)

Sulaymon Eshkabilov
Sulaymon Eshkabilov il 28 Dic 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

Categorie

Scopri di più su Shifting and Sorting Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by