我有NumPy数组,需要按两列排序(首先按0列排序,然后按第1列排序相等的值),这两个列都是降序的。当我尝试按列1和列0顺序排序时,第二次排序中相等的行将在第一次排序中按升序排序。
我的阵列:
arr = np.array([
[150, 8],
[105, 20],
[90, 100],
[101, 12],
[110, 80],
[105, 100],
])当我进行两次排序时(按第1栏和第0栏):
arr = arr[arr[:,1].argsort(kind='stable')[::-1]]
arr = arr[arr[:,0].argsort(kind='stable')[::-1]]我得到了这个结果(交换了第2行和第3行):
array([[150, 8],
[110, 80],
[105, 20],
[105, 100],
[101, 12],
[ 90, 100]])据我所知,之所以会发生这种情况,是因为稳定模式保留了等值的原始顺序,但当我们翻转索引使顺序下降时,原来的顺序也会发生变化。
我想要的结果是:
array([[150, 8],
[110, 80],
[105, 100],
[105, 20],
[101, 12],
[ 90, 100]])发布于 2022-02-03 02:57:06
使用numpy.lexsort同时对多列进行排序。
arr = np.array([
[150, 8],
[105, 20],
[90, 100],
[101, 12],
[110, 80],
[105, 100],
])
order = np.lexsort([arr[:, 1], arr[:, 0]])[::-1]
arr[order]产量:
array([[150, 8],
[110, 80],
[105, 100],
[105, 20],
[101, 12],
[ 90, 100]])https://stackoverflow.com/questions/70965163
复制相似问题