Create Unique Randomsample 1000 times

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

답변 (2개)

Jan
Jan 2017년 8월 14일
편집: Jan 2017년 8월 21일

0 개 추천

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

댓글 수: 3

Steve Sous
Steve Sous 2017년 8월 14일
Thank you for your reply!
I might have misinterpreted what I need. The code you wrote still invokes the randample function separately 1000 times. Does that guaranty that the 1000 random samples (50 each) from a(i=1:1000,:) are unique?
Thank you
José-Luis
José-Luis 2017년 8월 15일
Yes.
Jan
Jan 2017년 8월 20일
편집: Jan 2017년 8월 21일
See [EDITED]

댓글을 달려면 로그인하십시오.

Akira Agata
Akira Agata 2017년 8월 17일

0 개 추천

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

I think I might be missing something! The suggested code does not give nonunique values. For example, if I add the following code line in the middle:
a(10,:) = a(1,:);
Which forces a replicate, the any(~isUnique) is still 0
Here is the full code
% Make a variable 'a'
a = zeros(1000, 50);
for i =1:1000
a(i, :) = sort(randsample(100,50));
end
%Added Line
a(10,:) = a(1,:);
% Check the uniqueness
isUnique = true(1000,1);
for i =1:1000
if length(unique(a(i,:))) ~= 50
isUnique(i) = false;
end
end
any(~isUnique)
Akira Agata
Akira Agata 2017년 8월 22일
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.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Axis Labels에 대해 자세히 알아보기

태그

질문:

2017년 8월 14일

댓글:

2017년 8월 22일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by