从逻辑矩阵中选择随机"1"元素

Abd*_*rok 1 matlab matrix

所以我要做的就是从matlab中的逻辑矩阵中选择随机的'1'元素.假设我有一个这样的矩阵:

 A= 0 1 1 1 0
    0 1 0 1 1
    1 0 0 0 0
    0 0 1 0 0
    0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

我有一个数字n,它是一个数字,代表在程序中选择多少'1'个元素

例如,如果n=3那时输出可能如下所示:

 A'= 0 1 0 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)

*请注意,n的最大可能值是正在处理的矩阵中"1"个元素的数量

ser*_*ado 5

你应该找到1的索引,选择n个唯一的随机整数,并处理这些索引:

n = 3;
A= [0 1 1 1 0;
    0 1 0 1 1;
    1 0 0 0 0;
    0 0 1 0 0;
    0 0 0 0 0];

% // idx of the ones in the matrix, also has information on size
idx = find(A == 1);

% // n unique rand numbers from 1 till nr_of_ones
randidx = randperm(numel(idx), n);

% // new matrix 
B = zeros(size(A));

% // select the random indexes
B(idx(randidx)) = 1
Run Code Online (Sandbox Code Playgroud)