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;
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

Answers (1)

Walter Roberson
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);
  1 Comment
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

Sign in to comment.


Find more on Matrices and Arrays in Help Center and File Exchange


Community Treasure Hunt

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

Start Hunting!