我理解按列对 numpy 数组 arr
进行排序(仅针对特定列,例如其第二列)可以通过以下方式完成:
arr[arr[:,1].argsort()]
我如何理解此代码示例的工作原理:argsort
对 arr
第二列的值进行排序,并以数组形式给出相应的索引。该数组作为行号提供给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()
以简单的方式获取数组,但没有成功
最佳答案
我假设arr
是一个numpy数组?我还没有在 python 的任何其他上下文中看到过 arr[:,1] 语法。值得在您的问题中提及这一点!
假设是这种情况,那么您应该使用
arr.sort(axis=0)
按列排序
arr.sort(axis=1)
按行排序。 (两者都就地排序,即更改arr
的值。如果您不希望这样,可以先将arr
复制到另一个变量中,然后对其应用sort
。)
如果您只想对单行进行排序(在本例中为第二行),则
arr[1,:].sort()
有效。
编辑:我现在明白您正在尝试解决什么问题。您想要对矩阵中的列重新排序,以便第 n 行按递增顺序排列。您只需通过
即可做到这一点arr[:,arr[1,:].argsort()]
(这里我们按第二行排序)。
关于python - python中按行对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36888761/