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

hul*_*ain 3 python arrays sorting opencv numpy

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

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

 [[ 0, 2],
  [ 0, 0],
  [-1, 8],
  [-6, 7],
  [-1, 1]]
Run Code Online (Sandbox Code Playgroud)

预期排序的numpy数组:

 [[-6, 7],
  [-1, 1],
  [-1, 8],
  [ 0, 0],
  [ 0, 2]]
Run Code Online (Sandbox Code Playgroud)

我希望数组根据第一列进行排序,如果第一列中的值相等,我希望它根据第二列进行排序.有没有办法以最少的时间复杂度这样做,因为处理要在云上完成?

Div*_*kar 5

你可以用np.lexsort-

a[np.lexsort(a[:,::-1].T)]
Run Code Online (Sandbox Code Playgroud)

样品运行 -

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]])
Run Code Online (Sandbox Code Playgroud)