我有一个二进制矩阵 A 作为
A=[0 0 0 1
0 1 1 0;
0 1 0 1;
0 0 0 1;
0 1 1 1]
我想对矩阵 A 重新排序,使至少 1 列具有“1”值。于是,矩阵A就来了
%% switch first col and last col in the first row
A=[1 0 0 0
0 1 1 0;
0 1 0 1;
0 0 0 1;
0 1 1 1]
现在,A满足了上述条件。是否可以在 MATLAB 中实现它?谢谢大家
第二个例子
A=[1 0 0 1;
0 0 1 1;
0 0 0 1]
那么结果是
A=[1 0 0 1;
0 1 1 0; %% second and fourth col is switched
0 0 0 1]
更新:如果 A 行正在运行,会发生什么情况。这意味着在 t=0 时,第一行出现并且 A=[1 0 0 1]。然后下一次,第二排来了。矩阵 A 将是 A=[1 0 0 1; 0 0 1 1]。然后算法将在这里检查,因为第二列。 A 的值为零。执行切换,然后 A 的下一个列出现,依此类推。你能设计帮助我实现该任务吗?
最佳答案
简单的确定性策略,从左上角开始,用第一行填充尽可能多的列,然后继续下一行和下一列。对于剩余的行,只需从第一列重新开始。
%Get rows in which ones can be found.
[~,r]=find(A.');
%Assign new column values for the ones
c=mod(0:numel(r)-1,size(A,2))+1;
B=zeros(size(A));
B(sub2ind(size(A),r(:),c(:)))=1;
关于algorithm - 如何重新排序二进制矩阵,使列中至少有 '1' 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34811893/