【问题标题】:How do I create random Boolean array with at least one 1 in each row in matlab?如何在matlab的每一行中创建至少一个1的随机布尔数组?
【发布时间】:2015-06-04 08:19:47
【问题描述】:

我正在尝试在 Matlab 中创建 roandom 布尔数组,每行至少有一个 1。

【问题讨论】:

  • 你试过了吗?
  • 每行需要多少个? 50%? 25% 只有一个?
  • 是的。 A = round(rand(m,n)) % 对于 m*n 矩阵。谢谢。

标签: arrays matlab random boolean


【解决方案1】:

你可以使用randi来生成随机整数吗?

A = randi([0 1], 50, 10);

生成一个 50×10 的整数值数组,该数组从 0 或 1 统一绘制,并且 您可以通过

将矩阵转换为数据集数组
   ds = mat2dataset(A);

将二进制行转换为数字 - 与前面的答案一样:

bin2dec(num2str(A(n,:)));

【讨论】:

    【解决方案2】:

    假设您想要一个大小为 m-by-n 的随机逻辑(布尔)矩阵,每行的 p=0.25 条目大致设置为 true但不少于一个 ,那么你可以简单地:

    P = rand(m,n); %// generate random numbers in [0,1]
    th = min( max(P,[],2), 1-p ); %// set threshold
    B = bsxfun( @ge, P, th ); %// threshold the probability matrix to get random boolean entries
    

    请注意,阈值由每行所需的true 值的数量决定,但它也会被截断为每行的max 值,确保至少设置一个元素(随机)到true

    【讨论】:

      【解决方案3】:

      这是一种方法。让

      M = 5; %// number of columns
      N = 4; %// number of rows
      p = .5; %// initial probability of 1
      

      您可以生成具有给定概率的矩阵,然后在每行的随机位置填充一个(可能覆盖零)以确保每行中至少有一个:

      result = rand(M,N)<p; %// generate matrix
      result(bsxfun(@plus, floor(N*rand(1,M))*M, 1:M)) = 1; %// at least a one per row
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-29
        • 2021-02-07
        • 1970-01-01
        相关资源
        最近更新 更多