# how to split a vector based on value rank?

3 views (last 30 days)
Niki on 6 Feb 2014
Edited: Niki on 7 Feb 2014
y = rand(1000,1); % generate a random vector
[a b]=size(y) % a is length
[yrank,index] = sort(y) % sort small to large
t1= 500;
t2=250;
t2=250;
I want to make three vectors , Vector 1 = includs as many element as t1 (e.g. 500) Vector 2= includes as many element as t2 (e.g.250) Vector 3= includes as many elements as t3 (e.g.250)
How we give these elements to each vector ? I want to give the elements with greatest and lowest value to Vector 1 then element with greatest value (but lower than the one given to Vector 1) and element with lowest value ( but greater that that given to vector 1) placed in Vector 2 then the same for vector 3. It contineous until all the elemenst are placed in the three vectors
Niki on 6 Feb 2014
Edited: Niki on 7 Feb 2014
No one???

Walter Roberson on 6 Feb 2014
shidx = [index(1:end/2), index(end:-1:end/2+1)];
vector1 = reshape(shidx(1:2:end, :).', [], 1);
vector2 = shidx(2:2:end, 1);
vector3 = shidx(2:2:end, 2);
Niki on 6 Feb 2014
this is very interesting but it is limited to the numbers I said as example. If want to have for example 300 in vector1 and 400 vector2 and 300 in vector3. then I cannot use it