我想要一个函数来计算二进制矩阵的完整矩阵?

时间:2016-05-06 09:48:29

标签: matlab function matrix

如果我有(行,列)矩阵M像这样

   M = [ 1 1 0 1 0 1
         0 1 1 0 1 0
         1 0 1 0 1 0
         0 1 0 1 0 1 
         1 1 0 1 1 1 ]

然后我发现了这两个Matrix M_row和M_col

  M_row = [ 2 1 1 
            2 1 0
            1 1 1
            1 1 1
            2 3 0 ] 

哪个M_row显示M

中每行中每组的1个

之后,我将sum_row和count_row基金作为

的基金

sum_row显示M_row

中元素的总和
  sum_row = [ 4
              3
              3
              3
              5 ]

count_row显示M_row

中非零元素的数量
  count_row = [ 3
                2
                3
                3
                2 ]

例如M_row中的最后一行是[1 3 0],表示有[1 0 0 1 1 1]

我想要一个功能

  • 首先生成(行,列)零点矩阵X
  • 第二次

     for k=1:n 
        if sum_row(k) +  count_row(k) - 1 == columns then 
    go back to M_row and convert this row element to group ones 
    

例如k = 1,4 + 3-1 = 6使条件为真然后烘焙到M_row并将[2 1 1]转换为[1 1 0 1 0 1]

最终答案将是

      X = [ 1 1 0 1 0 1
            0 0 0 0 0 0
            0 0 0 0 0 0
            0 0 0 0 0 0
            1 1 0 1 1 1 ]

1 个答案:

答案 0 :(得分:0)

好的,我会快速拍摄一下:

X = zeros(size(M));
numCols = size(M, 2);
for k=1:length(count_row)
    if sum_row(k)+count_row(k)-1 == numCols
       X(k,:) = M(k,:);
    end
end

IMO,无需从M转换回X,只要符合条件就可以将整行M放入X.

我遗漏了矢量化代码(更好,更短,更快),供您理解(即for循环更容易理解)。如果你想加快速度,可以考虑自己实现矢量化索引而不是使用for循环。

我从评论中读到的内容是:您没有M,只有M_row。好的,请先使用其他问题的解决方案:how to generate a random binary matrix with a specific condition in matlab?M_restored生成M_row,然后使用我的代码从X生成M_restored