# Choose random element of vector

4 views (last 30 days)
giorgos kivides on 24 Jan 2020
Commented: giorgos kivides on 24 Jan 2020
I have a vector and i want to choose 2 random elements x1 and x2.
The x2 element I do not want to be the same element as x1 and i want to select after element x1
For example:
vector = [1,2,3,4,5,6,7,8,9]
element x1 may be the number 2. element x2 cannot be number 1 or number 2.

Sindar on 24 Jan 2020
Edited: Sindar on 24 Jan 2020
% select a random integer between 1 and the last index of the vector
ind_1 = randi([1 length(vector)]);
% select a random integer between ind_1 and the last index of the vector
ind_2 = randi([ind_1+1 length(vector)]);
% select the elements associated with these indices
x1=vector(ind_1);
x2=vector(ind_2);

#### 1 Comment

Walter Roberson on 24 Jan 2020
If length(vector) is randomly choosen for ind_1 then ind_2 has no room to be chosen from.

Walter Roberson on 24 Jan 2020
P1 = randi(length(Vector) - 1);
P2 = randi([P1+1,length(Vector)]) ;
x1 = Vector(P1) ;
x2 = Vector(P2) ;
Note that this is not a fair distribution. You could get a fairer distribution if you dropped the requirement that x2 be chosen strictly after choosing x1:
P = sort(randperm(length(Vector, 2)));
x1 = Vector(P(1));
x2 = Vector(P(2));
This is fairer but violates the condition that x1 be chosen before x2.

James Tursa on 24 Jan 2020
Edited: James Tursa on 24 Jan 2020
k = sort(randperm(numel(vector),2));
x1 = vector(k(1));
x2 = vector(k(2));
This assumes that you always want to be able to pick two numbers. I.e., x1 cannot be vector(end) and x2 cannot be vector(1).

giorgos kivides on 24 Jan 2020
Thanks a lot.I need some help. when choosing the two random elements, I would like to take the elements between them and change their order.
for example
vector = [1 2 3 4 5 6 7 8 9]
Random Elements: X1 = number 2. X2 = number 6.
the vector will have the format:
Newvector = [1 2 5 4 3 6 7 8 9]

James Tursa on 24 Jan 2020
To reverse order:
vector(k(1)+1:k(2)-1) = vector(k(2)-1:-1:k(1)+1);
To have random order:
m = randperm(k(2)-k(1)-1) + k(1) ;
vector(k(1)+1:k(2)-1) = vector(m);
giorgos kivides on 24 Jan 2020
thanks a lot

giorgos kivides on 24 Jan 2020
i want something yet.. i have an array and i want to convert to vector. i want in the vector the first elements to be the first row, etc.
for example:
array= [ 1 2 3 4 5; 11 12 13 14 15; 21 22 23 24 25]
the vector will have the format:
vector = [1 2 3 4 5 11 12 13 14 15 21 22 23 24 25]

Walter Roberson on 24 Jan 2020
reshape(array.', 1, [])
giorgos kivides on 24 Jan 2020
thanks. And i have the vector and i want to add the number 1 at start of vector. for example:
vector = [2 3 4 5 6]
newvector = [1 2 3 4 5 6].