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!