Wolfram mathematica 在Mathematica中,如何按矩阵的第二列对矩阵进行排序?

Wolfram mathematica 在Mathematica中,如何按矩阵的第二列对矩阵进行排序?,wolfram-mathematica,Wolfram Mathematica,想象一下你有: a = {{5, 1, 1}, {2, 0, 7}, {3, -4, 6}} 你想按第二列排序,得到 b = {{3, -4, 6}, {2, 0, 7}, {5, 1, 1}} 我试过用[a,Last]排序并在最后一列中使用,但在第二列中无法使用 提前感谢:-)这确实有效: SortBy[a,#[[2]]&] 也许您可以使用此url: 您可以使用的代码: a={{300,48,2},{500,23,5},{120,55,7},{40,32,1}}; b=SortB

想象一下你有:

a = {{5, 1, 1}, {2, 0, 7}, {3, -4, 6}}
你想按第二列排序,得到

b = {{3, -4, 6}, {2, 0, 7}, {5, 1, 1}}
我试过用[a,Last]排序并在最后一列中使用,但在第二列中无法使用

提前感谢:-)

这确实有效:

SortBy[a,#[[2]]&]

也许您可以使用此url:

您可以使用的代码:

a={{300,48,2},{500,23,5},{120,55,7},{40,32,1}};
b=SortBy[a, #[[2]]&]
结果:

Out[9]= {{500,23,5},{40,32,1},{300,48,2},{120,55,7}}
或者

a[[Ordering[a[[All, 2]]]]]

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

a=RandomReal[{0,10},{1000000,3}];
排序[a,#2[[2]]<#1[[2]]&];//时机
(*=>{34.367,Null}*)
卑鄙的,卑鄙的时机
(*=>{0.436,Null}*)
a[[排序[a[[全部,2][]]];//时机
(*=>{0.234,Null},克里斯赢*)
如果您的数据是:

a = {{5, 1, 1}, {2, 1, 7}, {3, -4, 6}}
您需要对第二个元素进行稳定排序,生成:

{{3, -4, 6}, {5, 1, 1}, {2, 1, 7}}
除非您意识到这一点,否则尝试用
SortBy
解决这个问题可能会非常令人沮丧:

SortBy[a, {#[[2]] &}]

{}
括号很重要。

这只是一个提示: 使用非atomar对象(如
Sqrt[…])
时,可能会得到意外的结果:

SortBy[Range[10], -Sqrt[#] &]
{9, 4, 1, 8, 2, 3, 5, 6, 7, 10}
这是由于

排序通常通过先放置较短的表达式来排序表达式,然后 然后以深度优先的方式比较各个部分。(参考手册)


如果需要数字排序,请始终使用N。

感谢您在不到一分钟的时间内回答!!,你救了我一天:-DHmmm。。。。“今年前0.23%”(贝里萨罗斯)与“本月前0.17%”(尼尔斯)@Brett我不是贝里萨罗斯,尚彭:D@belisarius我道歉!我必须将你的名字添加到我系统的拼写检查程序中。我对你回答中的编辑历史很感兴趣…@Brett我没有意识到编辑历史,因为我只看到了Sjoerd的编辑,并认为这是一种增强。回顾历史也是一种信心的投票:谢谢你的链接。事实上,我想按降序排序,这很有效:SortBy[a,-#[[2]]&]+1,奇怪。我原以为
SortBy
会赢,但我没想到
Sort
会这么糟糕。@rcollyer这里有更多有趣的计时@rcollyer
Sort
的结果是可以预测的,因为它引入了一个任意排序函数。@Leonid,是的,我可能从Mathgroup或你的书中学到了这一点。从上面的讨论中,在一些数值实验中,使用
Sort
时调用用户提供的函数的次数似乎与使用
SortBy
时相同。与实际计时比~100相比,这给了我们~19的因数。5倍的差异从何而来,我可以想象很多合理的解释,但没有一个是容易测试的。我花了几个小时才注意到你发布了这个。过了一段时间我才明白你的意思,过了很长时间我才明白你的意思。有意思,我想你应该说得更清楚一点。我的第一个问题是,一开始我没有注意到你对问题的原始数据做了细微的更改(引入“关系”的问题),然后我不明白为什么括号解决了这个问题。如果括号之间没有任何额外的断开领带的函数,领带是如何解决的,AFAI无法说明。我认为{}案例中的断开领带规则只是“先到先走”。在no-{}情况下,它是按规范排序的。例如,在
a={{5,1,1},{2,1,7},{3,-4,6},{2,1,6}
上尝试这两种排序。@Sjoerd是的,这是我的理解。@belisarius谢谢,那就解决了。好提示。如果“atomar”不是一个拼写错误,它是否意味着原子以外的东西?@a tomar先生在西班牙语中的意思是“让我们喝吧!”这似乎与这个问题无关。
SortBy[Range[10], -Sqrt[#] &]
{9, 4, 1, 8, 2, 3, 5, 6, 7, 10}