如何通过第二列在Mathematica中订购矩阵?

nin*_*ita 7 wolfram-mathematica

想象一下你有:

a = {{5, 1, 1}, {2, 0, 7}, {3, -4, 6}}
Run Code Online (Sandbox Code Playgroud)

并且您想要通过第二列订购,以获得

b = {{3, -4, 6}, {2, 0, 7}, {5, 1, 1}}
Run Code Online (Sandbox Code Playgroud)

我已尝试过SortBy[a, Last]并为最后一栏工作,但我不能让它适用于第二列.

提前致谢 :-)

Dr.*_*ius 19

这确实有效:

SortBy[a,#[[2]]&]
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你在不到一分钟的时间内回答!!,你救了我的一天:-D (2认同)

Chr*_*nen 12

或者,

a[[Ordering[a[[All, 2]]]]]
Run Code Online (Sandbox Code Playgroud)


Sjo*_*ies 8

在这里,对于强制性的时间(我添加了基本Sort的方法):

a = RandomReal[{0, 10}, {1000000, 3}];

Sort[a, #2[[2]] < #1[[2]] &]; // Timing

(* ==> {34.367, Null} *)

SortBy[a, #[[2]] &]; // Timing

(* ==> {0.436, Null} *)

 a[[Ordering[a[[All, 2]]]]]; // Timing

(* ==> {0.234, Null}, Chris wins *)
Run Code Online (Sandbox Code Playgroud)

  • 从上面的讨论,一些数值实验,似乎用户提供的函数在使用`Sort`时比在使用`SortBy`时多被称为``1.35 Log [n]`.与~100的实际时间比相比,这给出了~19的因子.在那5x差异来自哪里,我可以想象许多合理的解释,但没有一个是容易测试的. (2认同)

Nie*_*els 5

也许你可以使用这个网址:http://12000.org/my_notes/mma_matlab_control/KERNEL/node99.htm

您可以使用的代码:

a={{300,48,2},{500,23,5},{120,55,7},{40,32,1}};
b=SortBy[a, #[[2]]&]
Run Code Online (Sandbox Code Playgroud)

结果:

Out[9]= {{500,23,5},{40,32,1},{300,48,2},{120,55,7}}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的链接。事实上,我想按降序排序,这有效:SortBy[a, -#[[2]]&amp;] (2认同)