How can produce this matrix?
1 回表示 (過去 30 日間)
古いコメントを表示
I want to produce a m×n matrix for example like this: x=[1 1 1 0 1 0 1 1; 0 0 0 1 0 1 0 0] This matrix can give 0 or 1 for its elements. This 0 and 1 elements must be randomly distributed so that sum of each column is equal to one. I have a value like "k" that sum of the fisrt row can be equal or less than k. In defining the above matrix I also want to consider the following conditions: if the sum of the first row is less than k the all elements in the first row must be consider to 1 and all elements in the other rows must be zero. Otherwise, if the sum of the first row is equal to k the first row elements can be 0 or 1 but remind that the sum of each column must be 1.
採用された回答
Dyuman Joshi
2023 年 12 月 6 日
編集済み: Dyuman Joshi
2023 年 12 月 6 日
M = 3; N = 7;
k=2;
arr = accumarray([randi(M,1,N); (1:N)].', 1, [M N])
if sum(arr(1,:))<k
arr = [ones(1,N);zeros(M-1,N)];
end
arr
0 件のコメント
その他の回答 (1 件)
Walter Roberson
2023 年 12 月 6 日
編集済み: Walter Roberson
2023 年 12 月 6 日
For the sum of each column to be 1, and the elements are each 0 or 1, then it follows that for every column, there must be exactly 1 row that is set to 1. You can use randi() to select the rows.
M = 5; N = 4;
matrix = zeros(M, N);
matrix(sub2ind([M,N], randi(M, N, 1), (1:N).' )) = 1;
matrix
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!