# multiple random samples of size k

19 views (last 30 days)
cmo on 25 Jun 2015
Commented: Star Strider on 25 Jun 2015
I would like to generate M random samples, each of size k , from the integers 1:n without replacement.
(i.e. generate an M-by-k matrix of random integers, where each row contains integers in [1,n], and within a row, no integer is repeated).
I will use this matrix to perform Monte Carlo hypothesis testing.
I can easily write this in Matlab myself., however...
I would like to use an in-built Matlab function, but I am unable to find one. Does such a function exist in Matlab?
Note: Matlab's bootstrap do not fulfill the criteria I listed above.

Walter Roberson on 25 Jun 2015
You could use randperm(n,k) in a loop. But randperm is not designed to generate an array. You can look into the randperm implementation and generalize it easily:
T = rand(M, n);
[~, order] = sort(T, 2);
randsamples = order(:,1:k);

Azzi Abdelmalek on 25 Jun 2015
Edited: Azzi Abdelmalek on 25 Jun 2015
n=6
k=3
row1=randperm(n,k)
For a matrix with M rows
n=6
k=3
M=5
A=cell2mat(arrayfun(@(x) randperm(n,k),(1:M)','un',0))

Star Strider on 25 Jun 2015
Use the nchoosek function. It will do what you want. The randperm function is another option that may be more appropriate to your application.
##### 2 CommentsShowHide 1 older comment
Star Strider on 25 Jun 2015
My pleasure. The perms function has the same limitations, but it and nchoosek are the only ones I know of that produce matrices. Otherwise, you’re reduced to using a loop with randperm to create your matrix.