如果我有(行,列)矩阵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]
我想要一个功能
第二次
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 ]
答案 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
。