【问题标题】:sort an array by row in python在python中按行对数组进行排序
【发布时间】:2016-04-27 11:42:31
【问题描述】:

我知道按列对 numpy 数组 arr 进行排序(仅针对特定列,例如其第二列)可以通过以下方式完成:

arr[arr[:,1].argsort()]

我如何理解此代码示例的工作原理:argsortarr 的第二列的值进行排序,并将相应的索引作为数组提供。该数组作为行号提供给arr。我的解释正确吗?

现在我想知道如果我想根据第二行而不是第二列对数组arr 进行排序怎么办?是在排序之前转置数组并在排序后将其转回的最简单方法,还是有一种方法可以像以前一样(通过给出一个包含我们希望显示的列数的数组)?

我没有使用(n,n)array[(n,)array](n 是二维数组的大小),而是尝试使用(n,n)array[(n,1)array] 之类的方法来指示列数,但它不起作用。

我想要的示例:

arr = [[11,25],[33,4]] => 基本数组

arr_col2=[[33,4],[11,25]] => 我用argsort() 得到的数组

arr_row2=[[25,11],[4,33]] => 数组我尝试使用argsort() 以简单的方式获得但没有成功

【问题讨论】:

  • 我怀疑这是一个 numpy 数组,而不是 vanilla python 数组——在这种情况下,它不是那个问题的重复(尽管可能已经在其他地方问过)
  • 确实不是重复的。我想知道是否有与我描述的方法类似的方法来对特定行的 numpy 数组进行排序,而不是混合列(而不是对列进行排序)。我不明白的主要事情是 2darray[1darray] 是如何工作的。

标签: python arrays sorting


【解决方案1】:

我假设 arr 是一个 numpy 数组?我在 python 的任何其他上下文中都没有看到语法arr[:,1]。在您的问题中值得一提!

假设是这种情况,那么您应该使用

arr.sort(axis=0)

按列排序

arr.sort(axis=1)

按行排序。 (两者都就地排序,改变arr的值。如果你不想要这个,你可以先将arr复制到另一个变量中,然后应用sort。)

如果您只想对一行进行排序(在本例中为第二行),那么

arr[1,:].sort()

有效。

编辑:我现在了解您要解决的问题。您想对矩阵中的列重新排序,以便第 nth 行按升序排列。你可以简单地做到这一点

arr[:,arr[1,:].argsort()]

(这里我们按第二行排序)。

【讨论】:

  • 你猜对了 =)。但是,在使用我描述的方法之前,我尝试按照您所说的方式进行排序(似乎更合乎逻辑......),但它对所有行或所有列进行排序,而我只想对一个特定列进行排序而不混合行。而且我想知道是否有一种方法可以使用 argsort 以相同的方式对特定行进行排序
  • 我已经更新了我的答案来回答这个问题 - 我仍然不认为 argsort 是要走的路!
  • 那么这又不是我想要的,因为我希望行保持不变。通过执行arr[1,:].sort(),第 2 列已排序,但第 1 列未排序,这会导致行与未排序数组相比混淆。你明白我的意思吗?
  • 对不起,你能给我一个(比如说)3x3 矩阵作为输入和你正在寻找的输出的例子吗?
  • 好吧,我应该从这个开始。我用一个例子编辑了第一篇文章
猜你喜欢
  • 2021-03-30
  • 2011-10-13
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多