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!