numbers in random positions on a zero matrix
2 ビュー (過去 30 日間)
古いコメントを表示
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.
0 件のコメント
採用された回答
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),:);
0 件のコメント
その他の回答 (1 件)
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
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 Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!