python - python中按行对数组进行排序

标签 python arrays sorting

我理解按列对 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() 以简单的方式获取数组,但没有成功

最佳答案

我假设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/

相关文章:

python - 评估列表理解性能后对效率的困惑

python - Matplotlib:在极轴上绘制任意向量

java - android 文件中存储字符串与字节数组的文件大小不同

python - 模块未找到错误: No module named 'fastai.structured'

python - 在 Python 中将列表分成一对

arrays - 如何在 Swift 中比较两个协议(protocol)数组是否相等?

arrays - 在数组中的特定索引处插入元素

arrays - 判断数组中是否存在两个元素之和正好为X?

ruby - 在 Ruby 中对多维数组进行排序

java - 对以前未知元素的列表进行排序 (List<?>)