Lut*_*ett 2 random matlab matrix indices
我正在尝试在零矩阵中高效地生成随机分散但数量有限的1。
假设我有一个10x10的零矩阵(zeros(10)),我想随机放置10个1,所以它看起来像:
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0
1 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 1 0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
在没有for循环的情况下又如何在没有手动插入每个位置的情况下如何做到这一点(此示例比我的实际问题小得多)?
到目前为止,我的代码:
% Generate zeros
M = zeros(10)
% Generate random indices
Rands = [randsample(10, 10) randsample(10, 10)]
Run Code Online (Sandbox Code Playgroud)
第一列为行索引,第二列为列索引。
现在,我显然不能仅仅将这些索引放入这样的行和列索引中M:
M(Rands(:,1), Rands(:,2)) = 1
如何跟踪这些随机索引的变化?
您可以randperm用来随机生成要填充的线性索引1:
sz = [10 10]; % desired size
n = 10; % desired number of ones
M = zeros(sz);
M(randperm(prod(sz), n)) = 1;
Run Code Online (Sandbox Code Playgroud)
另外,您也可以在一行中使用randperm和reshape:
M = reshape(randperm(prod(sz))<=n, sz);
Run Code Online (Sandbox Code Playgroud)