numpy 排序不一致?词法排序与唯一

numpy inconsistency in sorting? lexsort vs unique

我有一个numpy.ndarray个n维坐标。让我们坚持 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,它returns 排序数组的唯一元素:

print(np.unique(s,axis=0))
[[-1.    0.  ]
 [-1.    0.25]
 [ 0.    0.  ]
 [ 0.    0.5 ]]

现在元素从第一个索引到最后一个索引排序。 np.unique 没有更改顺序的选项。

我需要这两个函数,而且我需要一致的顺序。是否有 "unique" 或 lexsort 函数可以更改排序优先级?

我在这里找到了一个可能的解决方案:

s[np.lexsort(np.flipud(s.transpose()))]