繁体   English   中英

多维Numpy数组排序

[英]Multi Dimensional Numpy Array Sorting

我有(5,5)np.array如下。

>>> a
array([[23, 15, 11,  0, 17],
       [ 1,  2, 20,  4,  6],
       [16, 22,  8, 10, 18],
       [ 7, 12, 13, 14,  5],
       [ 3,  9, 21, 19, 24]])

我想对np.array进行多维排序,如下所示。

>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

为此,我做了

  1. flatten()数组。
  2. 对扁平数组进行排序。
  3. 重塑为(5,5)

在我的方法中,我觉得这是一种不好的编程习惯,是否有完成此任务的复杂方法? 谢谢。

>>> a array([[23, 15, 11,  0, 17],
       [ 1,  2, 20,  4,  6],
       [16, 22,  8, 10, 18],
       [ 7, 12, 13, 14,  5],
       [ 3,  9, 21, 19, 24]])

>>> a_flat = a.flatten()
>>> a_flat
array([23, 15, 11,  0, 17,  1,  2, 20,  4,  6, 16, 22,  8, 10, 18,  7, 12,
       13, 14,  5,  3,  9, 21, 19, 24])

>>> a_sort = np.sort(a_flat)
>>> a_sorted = a_sort.reshape(5,5)
>>> a_sorted
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

我们可以使用np.ravel()获得一个扁平化的视图,然后使用ndarray.sort()就地排序-

a.ravel().sort()

将所有内容放置在适当的位置,它可以避免创建任何临时数组,并且可以保持形状,从而避免了任何需要重塑的情况。

样品运行-

In [18]: a
Out[18]: 
array([[23, 15, 11,  0, 17],
       [ 1,  2, 20,  4,  6],
       [16, 22,  8, 10, 18],
       [ 7, 12, 13, 14,  5],
       [ 3,  9, 21, 19, 24]])

In [19]: a.ravel().sort()

In [20]: a
Out[20]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM