按列对 NumPy 中的数组进行排序

新手上路,请多包涵

如何按第 n 列对 NumPy 数组进行排序?

例如,给定:

 a = array([[9, 2, 3],
           [4, 5, 6],
           [7, 0, 5]])

我想按第二列对 a 的行进行排序以获得:

 array([[7, 0, 5],
       [9, 2, 3],
       [4, 5, 6]])

原文由 user248237 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 750
2 个回答

@steve回答 实际上是最优雅的方式。

对于“正确”的方式,请参见 numpy.ndarray.sort 的 order 关键字参数

但是,您需要将数组视为具有字段的数组(结构化数组)。

如果您最初没有使用字段定义数组,那么“正确”的方式会非常难看……

举个简单的例子,对它进行排序并返回一个副本:

 In [1]: import numpy as np

In [2]: a = np.array([[1,2,3],[4,5,6],[0,0,1]])

In [3]: np.sort(a.view('i8,i8,i8'), order=['f1'], axis=0).view(np.int)
Out[3]:
array([[0, 0, 1],
       [1, 2, 3],
       [4, 5, 6]])

就地排序:

 In [6]: a.view('i8,i8,i8').sort(order=['f1'], axis=0) #<-- returns None

In [7]: a
Out[7]:
array([[0, 0, 1],
       [1, 2, 3],
       [4, 5, 6]])

据我所知,@Steve 确实是最优雅的方式……

此方法的唯一优点是“order”参数是用于排序搜索的字段列表。例如,您可以通过提供 order=[‘f1’,‘f2’,‘f0’] 按第二列、第三列、第一列排序。

原文由 Joe Kington 发布,翻译遵循 CC BY-SA 4.0 许可协议

a 的第二列排序:

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

原文由 Steve Tjoa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题