numbers in random positions on a zero matrix

2 ビュー (過去 30 日間)
Doobie
Doobie 2017 年 5 月 5 日
編集済み: Andrei Bobrov 2017 年 5 月 5 日
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.

採用された回答

Andrei Bobrov
Andrei Bobrov 2017 年 5 月 5 日
編集済み: Andrei Bobrov 2017 年 5 月 5 日
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),:);

その他の回答 (1 件)

Santhana Raj
Santhana Raj 2017 年 5 月 5 日
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 件のコメント
Guillaume
Guillaume 2017 年 5 月 5 日
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.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by