【问题标题】:Matlab sort matrix depending on two columns in descending and ascending [duplicate]Matlab排序矩阵取决于降序和升序的两列[重复]
【发布时间】:2018-09-17 11:07:15
【问题描述】:

我想首先根据第三列升序对包含三列的矩阵进行排序,如果存在平局,则应根据第一列的值降序排序。例如

A=
    745 30  0.9
    421 60  0.8
    374 29  0.9
    358 32  0.9

应该改为

A= 
    421 60 0.8
    745 30 0.9
    374 29 0.9
    358 32 0.9

使用 sortrow(A, [3,1]) 我只能得到按升序排序的矩阵。提前致谢!

【问题讨论】:

标签: matlab sorting


【解决方案1】:

您可以根据列号的符号选择该列是升序还是降序。

根据docs,负值会导致给定列降序排序。

Column:列排序向量,指定为非零整数标量或非零整数向量。每个指定的整数值表示要排序的列。 负整数表示排序顺序为降序。

所以你想要

B = sortrows( A, [3, -1] );

如果您想更加明确,可以使用 direction 标志,正如 Sardar 在 cmets 中所指出的那样。这给出了相同的结果,但仅在 R2017a 之后才可用(1)

B = sortrows( A, [3, 1], {'ascend', 'descend'} );

(1):2017a docs 显示此功能,2016b docs 仅显示 mode 标志,它将 all 排序设置为升序或降序,并且不是特定于列的。

【讨论】:

  • 或使用direction标志
  • @SardarUsama 正/负功能是向后兼容的,direction 是在 R2017a 中引入的,所以一定是我没注意到!我已经相应地更新了答案。
猜你喜欢
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2013-05-08
  • 1970-01-01
  • 2011-08-25
  • 1970-01-01
相关资源
最近更新 更多