如何生成一个01矩阵且每一行的和大于等于1啊

就01矩阵保证每一行的和大于等于1怎么做啊,一个大矩阵,内部只有部分元素可以为1。

img

这样可以么?
先随机生成0-1矩阵,看这个矩阵里面的行是不是和大于等于1,如果这行全是0就不满足条件,对这行随机取一个元素置为1

1.首先生成一个0矩阵
2.每行随机个元素用1代替

主要思路:

  1. 生成一个0矩阵
  2. 遍历每一行,每行中,先随机生成非零值得个数,此处记为N,再随机生成N个随机数,代表该行中的这N列为1(N个数中可能有相同值)

参考代码如下:


%%
% 设置一个10行6列的0矩阵
% 行列数可以自己更改
A = zeros(10, 6);

for i = 1 : size(A, 1)
    % 生成一个随机数,代表该行有几个非零元素
    rownum = randi([1, size(A, 2)])
    % 生成一组随机数,代表该行的idx列为1
    % 可能有部分为重复的数,但能保证每行有一个非零元素
    idx = randi(([1, size(A, 2)]), 1, rownum);
    A(i, idx) = 1;
end

第一次运行:

A =

     1     1     0     0     0     1
     1     0     0     0     0     0
     0     0     0     1     0     0
     1     0     0     0     1     1
     0     0     0     0     0     1
     0     1     1     1     1     1
     1     0     0     0     0     0
     1     1     1     1     0     0
     1     1     1     1     0     1
     1     1     0     0     0     1

第二次运行:

A =

     0     1     1     0     1     1
     1     0     0     0     1     0
     1     0     1     0     0     0
     0     1     1     0     0     1
     1     0     1     0     1     1
     1     1     0     1     0     0
     1     0     0     0     0     1
     1     0     1     0     0     0
     0     0     0     0     0     1
     1     1     0     0     0     0

第三次运行:

A =

     1     1     0     0     0     1
     1     1     0     0     0     0
     0     0     0     1     0     0
     1     0     0     1     1     1
     1     1     1     0     1     0
     1     0     0     1     1     0
     0     1     0     1     1     0
     1     0     1     0     1     0
     1     0     0     1     1     0
     0     0     0     0     1     1