## Randomly select an element from a vector satisfying a condition

### Amirhossein Moosavi (view profile)

on 1 Jul 2019
Latest activity Commented on by Amirhossein Moosavi

on 2 Jul 2019

### Amirhossein Moosavi (view profile)

Dear experts,
I would like to randomly select an element from a vector satisfying a condition. In fact, I want to know what is the fastest way. For example, suppose vector X defined as follows:
X = [1 2 3 4 5 2 3 6 7 8 8 7 9 10 0 1 2 3 8 5 6 4];
How should I randomly select and identify the index of an element in this vector, which is greater than 2?
Amir

### Amirhossein Moosavi (view profile)

on 1 Jul 2019

I already have an answer to this question as follow (but I am seeking for faster solutions):
Ind = find(X > 2); Ind = Ind(randsample(1:numel(Ind), 1));

Bruno Luong

### Bruno Luong (view profile)

on 2 Jul 2019
The solution seems fine and pretty optimal to me. If you insist on faster move away from MATLAB or buy a faster computer.

### Jos (10584) (view profile)

on 1 Jul 2019

This is a two-step process:
1. create an intermediate array with all elements of X satisfying your condition
2. select a single element from that
You can combine the two steps in a single command:
randsample(X(X>2), 1)

#### 1 Comment

Amirhossein Moosavi

### Amirhossein Moosavi (view profile)

on 1 Jul 2019
Thanks for your time. This only gives the value of an element; while I want its index.

### David Goodmanson (view profile)

on 2 Jul 2019

Relative speeds are going to depend on the length of X and the value N that the elements have to be greater than, (2 in the example). The following is generally faster, by a factor of 2 or so.
f = find(X > M); % M = 2
Ind = f(randi(length(f)));

Amirhossein Moosavi

### Amirhossein Moosavi (view profile)

on 2 Jul 2019
Thanks for your answer. The problem here is a same index could be selected more than once if we want to select two or more indices.
David Goodmanson

### David Goodmanson (view profile)

on 2 Jul 2019
I agree, although the question did specify a single draw.
Amirhossein Moosavi

### Amirhossein Moosavi (view profile)

on 2 Jul 2019
You are right. Many thanks for your attention.