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()))]
我有一个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()))]