Arrays 在Matlab中创建二进制矩阵,报告增加的二进制矩阵数

Arrays 在Matlab中创建二进制矩阵,报告增加的二进制矩阵数,arrays,matlab,matrix,Arrays,Matlab,Matrix,我希望您能建议我编写一个Matlab代码,创建一个大小为31x5的二进制矩阵a,以便 A的第一行是[1] 从A的第2次到第6次,我们每行只有一次1 [1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1] [1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 ...] 从第7行到第16行,我们每行有1两次 [1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1]

我希望您能建议我编写一个Matlab代码,创建一个大小为31x5的二进制矩阵
a
,以便

  • A
    的第一行是
    [1]

  • A
    的第2次到第6次,我们每行只有一次
    1

    [1 0 0 0 0
     0 1 0 0 0
     0 0 1 0 0
     0 0 0 1 0
     0 0 0 0 1]
    
    [1 1 0 0 0
     1 0 1 0 0
     1 0 0 1 0
     ...]
    
  • 从第7行到第16行,我们每行有
    1
    两次

    [1 0 0 0 0
     0 1 0 0 0
     0 0 1 0 0
     0 0 0 1 0
     0 0 0 0 1]
    
    [1 1 0 0 0
     1 0 1 0 0
     1 0 0 1 0
     ...]
    
  • 从第17排到第26排,我们每排有
    1
    三次

  • 从第26行到第31行,我们每行有四次
    1

我可以手动操作,但我想知道是否有更快的方法进行操作。

这里有一种方法:

  • 生成包含0和1的所有可能行,除了所有0或所有1
  • 根据行和对行进行排序(原子排序),然后根据求反的行值对行进行排序,以生成所需的顺序
  • 预加一行以生成结果

  • 我建议您使用带有for循环的命令bin2dec()/dec2bin()。 bin2dec('10000')写入16,下一个写入bin2dec('01000')8 所以我猜你是在遵循某种模式

    将所有通缉号码放入如下数组:

    clear all;
    nums = [16 8 4 2 0];
    mat = [];
    for(a=1:1:size(nums,2))
        mBinChar = dec2bin(nums(a));
        
        for(b=1:1:length(mBinChar))
            mat(a,b) = str2double(mBinChar(1));
        end
    end
    

    这似乎并没有产生预期的课程结果,只是假装他的数字遵循某种模式