【问题标题】:Matlab Equivalent of sortrows for columnsMatlab 等效的列排序行
【发布时间】:2021-11-08 16:38:09
【问题描述】:

为了根据除第一列之外的所有列对矩阵进行排序,我使用了以下代码。我不希望 sortrows 考虑第一列,因为那是为了跟踪行号。

B = [1     1     0     0     0     0     0     0     0     1
     2     0     1     0     0     0     0     1     0     0
     3     0     0     1     0     1     0     0     1     0
     4     0     1     0     0     0     1     1     0     0
     5     0     0     1     0     0     0     0     1     0
     6     0     0     0     0     0     1     1     0     0
     7     1     0     0     1     0     0     0     0     0
     8     0     0     1     0     1     0     0     0     0]; 

D = -sortrows(-B,[2:size(B,2)])

如果要根据除第一行之外的所有行对矩阵进行排序,那么在按降序排序时会忽略每列的第一个元素怎么办?有没有类似sortrows的功能?

为了澄清,所需的输出是

 1     0     0     0     0     0     0     1     0     1
 2     1     1     0     0     0     0     0     0     0
 3     0     0     1     1     1     0     0     0     0
 4     1     1     0     0     0     1     0     0     0
 5     0     0     1     1     0     0     0     0     0
 6     1     0     0     0     0     1     0     0     0
 7     0     0     0     0     0     0     1     1     0
 8     0     0     1     0     1     0     0     0     0

【问题讨论】:

  • 转置,sortrows,转置回来?
  • @beaker 嗯...你看到了什么不匹配?
  • OP,如果您从示例输入中显示所需的输出将会很有帮助。
  • @beaker 我将问题文本理解为想要根据行对被视为原子的列进行排序(如sortrows 根据列对行进行排序)。但是,是的,需要澄清
  • 与问题相切,但值得注意的是,您可以获取sortrows 的第二个输出,即[data,idx] = sortrows(data) 来跟踪排序索引,而不是在其中添加额外的行/列你的矩阵。

标签: matlab sorting matrix


【解决方案1】:

你可以通过

  • 转置输入和输出
  • 将第 1 列分开
  • 您可以使用负排序索引来避免您所做的使输入和输出为负的操作
A = [B(:,1) sortrows( B(:,2:end).', -(2:size(B,1)) ).'];

>> A 
A =
     1     0     0     0     0     0     0     1     0     1
     2     1     1     0     0     0     0     0     0     0
     3     0     0     1     1     1     0     0     0     0
     4     1     1     0     0     0     1     0     0     0
     5     0     0     1     1     0     0     0     0     0
     6     1     0     0     0     0     1     0     0     0
     7     0     0     0     0     0     0     1     1     0
     8     0     0     1     0     1     0     0     0     0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2014-04-08
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多