How do I generate multiple binary matrices containing a single one in each row?
古いコメントを表示
I want to generate multiple m x n (size of known matrix A) binary matrices. The rule to respect is that every row has to contain a single 1.
Suppose I want to generate 10 matrices called randmat of size(A). This is the code I've written combining suggestions found on this forum. It should use a for cycle to generate random matrices of 0 and 1, then force each row to sum up to 1. The problem is that I'm using variables of different type, and the code doesn't work (MATLAB error: 'Unable to perform assignment because brace indexing is not supported for variables of this type').
for i = 0:9
[r,c] = size(A);
randmat{i+1} = randi([0 1],r,c);
rowsum = sum(randmat,2);
randmat{i+1} = bsxfun(@rdivide,randmat{i+1},rowsum);
end
How could It be solved?
Thanks in advance for your help.
3 件のコメント
Walter Roberson
2019 年 7 月 31 日
For any one matrix
sparse(1:r, randi(c, q, r))
Davide Biaggini
2019 年 7 月 31 日
編集済み: Davide Biaggini
2019 年 7 月 31 日
Walter Roberson
2019 年 7 月 31 日
Sorry, typo, on my phone 1 is long-press q so should have been randi(c, 1, r)
採用された回答
その他の回答 (1 件)
Andrei Bobrov
2019 年 7 月 31 日
編集済み: Andrei Bobrov
2019 年 8 月 1 日
May be so?
m = 8;
n = 6; % [m,n] = size(A);
k = 10;
[~,Anew] = sort(rand(m,n,k),2);% here fixed
M = Anew == 1;
3 件のコメント
Davide Biaggini
2019 年 7 月 31 日
編集済み: Davide Biaggini
2019 年 7 月 31 日
Andrei Bobrov
2019 年 7 月 31 日
Sorry! My typo, fixed.
Davide Biaggini
2019 年 8 月 1 日
カテゴリ
ヘルプ センター および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!