我有一个n维坐标的numpy.ndarray。让我们坚持n = 2,用s [i] [0]表示x坐标,用s [i] [1]表示y坐标。 例如:
s = np.asarray([[-1. , 0. ], [ 0. , 0. ], [ 0. , 0.5 ], [ 0. , 0. ], [-1. , 0.25]])
print(s)
[[-1. 0. ]
[ 0. 0. ]
[ 0. 0.5 ]
[ 0. 0. ]
[-1. 0.25]]
我希望能够按字典顺序对这些点进行排序,这可以通过np.lexsort通过以下方式完成。
print(s[np.lexsort(s.transpose())])
[[-1. 0. ]
[ 0. 0. ]
[ 0. 0. ]
[-1. 0.25]
[ 0. 0.5 ]]
np.lexsort始终从最后一个条目到第一个条目进行排序,即
(x_1,y_1) <= (x_2,y_2) <=> y_1 < y_2 OR y_1 == y_2 and x_1 <= x_2.
没有选项可以将顺序更改为以下内容,对吧?
(x_1,y_1) <= (x_2,y_2) <=> x_1 < x_2 OR x_1 == x_2 and y_1 <= y_2
另一方面,有函数numpy.unique返回数组中排序的唯一元素:
print(np.unique(s,axis=0))
[[-1. 0. ]
[-1. 0.25]
[ 0. 0. ]
[ 0. 0.5 ]]
现在,元素从第一个索引到最后一个索引进行排序。而且np.unique不能更改顺序。
我需要两个功能,并且需要一致的顺序。是否可以通过“ unique”或lexsort函数更改排序优先级?
答案 0 :(得分:0)
我在这里找到了一种可能的解决方案:https://stackoverflow.com/a/43825409/10552040
s[np.lexsort(np.flipud(s.transpose()))]