matlab - 如何重新排列该矩阵的列?

标签 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

我们如何才能以最佳方式重新排列任意给定的任意二进制二元矩阵的列?

最佳答案

执行此操作的一个非常简单的方法是使用函数 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

旧方法:

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

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

关于matlab - 如何重新排列该矩阵的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6203827/

相关文章:

matlab - Octave 矢量化循环 : for i = 1:size(v, 1) v(i,y(i)) = 1;结尾

image - 需要自动消除图像和物体外边界的噪声

matlab - 将轴放在前面而不重新绘制图形?

matlab - Matlab 和 OpenCV 之间的距离变换行为不同

r - 将 S4 R 对象分配给矩阵 : why does this work?

Scala 矩阵库计算大斐波那契数

sorting - Google 脚本 - 表格 - 排序 - 如何避免对第一行进行排序?

ios - 使用 Swift 对日语字符进行排序

php按自定义顺序对多维数组进行排序

r - R 中的矩阵运算 : parallelization, 稀疏运算,GPU 计算