Create Unique Randomsample 1000 times
Show older comments
Hi Everyone,
I want to create a matrix based on 1000 random samples of 50 numbers selected from 1 to 100, as follows:
a = [];
for i =1:n
y = randsample(100,50);
a = horzcat(a,sort(y));
end
Here the variable "a" should have 1000 fields for 50 random numbers selected from 1 to 100
I want to make sure that the numbers are unique for each field. Does anyone know the best way to do this?
Thanks
Answers (2)
a = zeros(n, 50);
for i =1:n
a(i, :) = sort(randsample(100,50));
end
[EDITED] Or do you mean that the rows should be guaranteed to be different? Then:
% Rejection method:
a = zeros(n, 50);
i = 0;
while i < n
v = sort(randperm(100, 50));
if ~any(all(a(1:i, :) == v, 2))
i = i + 1;
a(i, :) = v;
end
end
Akira Agata
on 17 Aug 2017
Just in case, you can check the uniqueness by:
% Make a variable 'a'
a = zeros(1000, 50);
for i =1:1000
a(i, :) = sort(randsample(100,50));
end
% Check the uniqueness
isUnique = true(1000,1);
for i =1:1000
if length(unique(a(i,:))) ~= 50
isUnique(i) = false;
end
end
any(~isUnique)
2 Comments
Steve Sous
on 21 Aug 2017
Akira Agata
on 22 Aug 2017
Well, I don't understand your point clearly.
In my previous code, each row of a contains unique 50 random number. That means length(unique(a(k,:))) is always 50 for all k (=1:1000). Therefore, even if you add the line "a(10,:) = a(1,:);", the output any(~isUnique) becomes 0 and there is no strange point in this behavior.
So, I would be happy if you could explain clearly what is the point and what kind of output you want to obtain.
Categories
Find more on Axis Labels 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!