【问题标题】:Select random '1' element from a logical matrix从逻辑矩阵中选择随机“1”元素
【发布时间】:2014-10-19 02:49:33
【问题描述】:

所以我想做的只是从 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

我有一个数字 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

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

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    你应该找到 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
    

    【讨论】: