Generating random ones and zeros controllably

조회 수: 22 (최근 30일)
Sam Lee
Sam Lee 2016년 3월 23일
편집: dpb 2016년 3월 23일
I am making a simple game in MATLAB that requires ones and zeros to be generated in a 5x5 matrix. I want to prespecify the number of ones and let the program generate them randomly among the zeros in the matrix. I tried using the rand function but I couldn't find a way to do the above.
How can I generate the required matrix?

채택된 답변

Ced
Ced 2016년 3월 23일
편집: Ced 2016년 3월 23일
You can generate a vector ( or matrix if you like ) with the desired number of zeros and ones, and then permute them randomly using randperm.
Example for a 5x5 matrix:
N = 25; % total number of elements
N_ones = 10; % number of ones
v = zeros(N,1);
v(1:N_ones,1) = 1; % vector with desired entries
% Now, scramble the vector randomly and reshape to desired matrix
A = reshape(v(randperm(N)),5,5);

추가 답변 (2개)

dpb
dpb 2016년 3월 23일
편집: dpb 2016년 3월 23일
doc randperm % note the second optional input...
Will leave as "exercise for the student" the actual application but is straightforward... :)
ADDENDUM
See some verbose ways so I'll throw in another...shorter is simply
N=5; % array size (dimension)
nOnes=10; % number of ones
a=zeros(N); % allocate the array
a(randperm(numel(a),nOnes))=1; % set the one locations

Charles Dunn
Charles Dunn 2016년 3월 23일
Interesting question. There are probably a couple ways to do this. I would check out the randperm function.
sz = [5 5];
N = prod(sz);
n = 5;
vals = cat(2,ones(1,n),zeros(1,N - n));
result = reshape(vals(randperm(N)),sz);

카테고리

Help CenterFile Exchange에서 Just for fun에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by