如何重新排列此矩阵的列?

时间:2011-06-01 15:35:44

标签: matlab sorting matrix

给定一个二进制矩阵,其中每一行和每列只包含一个1,我需要按列重新排列矩阵,使其成为一个单位矩阵。例如,给定二进制矩阵:

Binary = [ 0     1     0     0     0
           0     0     1     0     0
           1     0     0     0     0
           0     0     0     0     1
           0     0     0     1     0 ]

要获取单位矩阵,我们会将列重新排列为2 3 1 5 4

如何为任何给定的任意方二进制矩阵优化重排列?

2 个答案:

答案 0 :(得分:4)

一种非常简单的方法是使用函数FIND,如下所示:

[index,~] = find(Binary.');  %'# Transpose the matrix and find the row indices
                              %#   of the non-zero entries

你可以测试它的工作原理如下:

>> Binary(:,index)

ans =

     1     0     0     0     0    %# Yup, that's an identity matrix alright!
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     0     1

OLD APPROACH:

这不像上面的解决方案那样紧凑或高效,但您也可以转置矩阵并使用SORTROWS对列进行排序(现在转换为行)并返回排序索引。这实际上会按升序对值进行排序,这将为您提供反对角矩阵,因此您需要使用FLIPUD来翻转索引向量。这是代码:

[~,index] = sortrows(Binary.');  %'# Transpose and sort the matrix
index = flipud(index);            %# Flip the index vector

答案 1 :(得分:1)

如果您知道矩阵可以被操作为单位矩阵,为什么不创建具有相同维度的单位矩阵?

identity_matrix=eye(length(Binary))