仅当第1列中的值相同时,才根据第2列对numpy数组进行排序

时间:2016-12-22 13:34:53

标签: python arrays sorting opencv numpy

我有一个numpy数组,其中包含使用OpenCV的findNonZero()方法得到的坐标。我想对它们进行排序以绘制轮廓。

示例未排序的numpy数组(不是坐标):

 [[ 0, 2],
  [ 0, 0],
  [-1, 8],
  [-6, 7],
  [-1, 1]]

预期排序的numpy数组:

 [[-6, 7],
  [-1, 1],
  [-1, 8],
  [ 0, 0],
  [ 0, 2]]

我想根据第一列对数组进行排序,如果第一列中的值相等,我希望根据第二列对其进行排序。有没有办法可以做因为处理要在云上进行,所以时间复杂度最小?

1 个答案:

答案 0 :(得分:5)

您可以使用np.lexsort -

a[np.lexsort(a[:,::-1].T)]

示例运行 -

In [42]: a
Out[42]: 
array([[ 0,  2],
       [ 0,  0],
       [-1,  8],
       [-6,  7],
       [-1,  1]])

In [43]: a[np.lexsort(a[:,::-1].T)]
Out[43]: 
array([[-6,  7],
       [-1,  1],
       [-1,  8],
       [ 0,  0],
       [ 0,  2]])