Given a vector, I would like to sample without replacement elements from it repeatedly.

1 view (last 30 days)
Given a (m x 1) vector v , I would like to ,randomly without replacement, sample s elements from it. I know I can use randsample(v,s) if I were to do this once. However, I want to do this repeatedly without using a for loop (i.e vectorization) so that it is fast.
  1 Comment
Matt J
Matt J on 21 Aug 2020
Edited: Matt J on 21 Aug 2020
However, I want to do this repeatedly without using a for loop
If you make s>1, you will receive more than one selected sample. It will give you s samples in a single call.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 21 Aug 2020
m=10; n=15; s=3;
V=rand(m,n); %hypothetical data
[~,ids] = sort( rand(size(V)) ,1);
ids=ids(1:s,:)+m*(0:n-1);
selection=V(ids) %selects s elements from each column of V
  4 Comments

Sign in to comment.

More Answers (1)

Bruno Luong
Bruno Luong on 21 Aug 2020
Edited: Bruno Luong on 21 Aug 2020
v = 'a':'z' % your vector
n = 10; % number of "loop"
s = 3; % number of drawing without replacement
[~,ir] = maxk(rand(n,length(v)),s,2);
r = v(ir)

Categories

Find more on Loops and Conditional Statements 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!