如何在Matlab中从矩阵中随机选择x个索引

问题描述 投票:2回答:2

我试图在零的矩阵中有效地生成随机分散但数量有限的1。

假设我有一个10x10的零矩阵(zeros(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

如何在没有for循环且没有手动插入每个位置的情况下执行此操作(此示例是我真实问题的小得多的版本)?

我的代码到目前为止:

% Generate zeros
M = zeros(10)
% Generate random indices
Rands = [randsample(10, 10) randsample(10, 10)]

其中第一列是行索引而第二列是列索引。

现在我显然不能将这些索引放到M的行和列索引中,如下所示:

M(Rands(:,1), Rands(:,2)) = 1

我如何评估这些随机指数的变化?

matlab matrix random indices
2个回答
5
投票

您可以使用randperm随机生成要用1填充的线性索引:

sz = [10 10]; % desired size
n = 10; % desired number of ones
M = zeros(sz);
M(randperm(prod(sz), n)) = 1;

或者,您可以在一行中使用randpermreshape

M = reshape(randperm(prod(sz))<=n, sz);

4
投票

您可以使用sub2ind将下标转换为线性索引:

M(sub2ind(size(M),Rands(:,1),Rands(:,2)))=1
© www.soinside.com 2019 - 2024. All rights reserved.