我有一个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]]
我想根据第一列对数组进行排序,如果第一列中的值相等,我希望根据第二列对其进行排序。有没有办法可以做因为处理要在云上进行,所以时间复杂度最小?
答案 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]])