numbers in random positions on a zero matrix

2 views (last 30 days)
I want to generate a random matrix (let's say a 5x4 matrix) with the following properties:
  • There must be one 3, two 2s, nine 1s, eight 0s in the matrix.
  • In each row, there is at most one 3 or 2 and at most two 1s.
  • In each row, if there is a 3, then there is no 2.
  • In each row, if there is a 3, then there is one 1.
  • In each row, if there is a 2, then there are two 1s.
An example matrix:
0 0 1 1
3 1 0 0
2 1 1 0
0 1 1 2
0 1 1 0
How do I generate such a matrix? I don't even know where to begin. Any help is greatly appreciated.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 5 May 2017
Edited: Andrei Bobrov on 5 May 2017
m = 5;
n = 4;
T = [2 2 3 ones(1,9) zeros(1,8)];
out = reshape(T,m,[]);
[~,ii] = sort(rand([m,n]),2);
out = out(sub2ind([m,n],repmat((1:m)',1,n),ii));
out = out(randperm(m),:);

More Answers (1)

Santhana Raj
Santhana Raj on 5 May 2017
Start with the function randi(4). it generates random integers. It doesnt give 0, so you can generate with a max of 4 and subtract 1 with the result.
Now with whatever number generated, check your 4 conditions. If they are all valid. place it in its position in the matrix. Repeat it for any size of matrix you want!!
  1 Comment
Guillaume
Guillaume on 5 May 2017
randi will generate numbers in whichever range you want as long as you ask it to. To get number between 0 and 3:
randi([0 3])
No need to do some gymnastics.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!