
需求:以某行或某列为 key ,对列或行顺序进行整体平移, 例如以下矩阵
[[1.2, 0.5, 0.1, 0.9], [ 3, 5, 8, 6]] 如果以首行为 key ,期望获得结果为
[[0.1, 0.5, 0.9, 1.2], [ 8, 5, 6, 3]] 使用代码是 np.argsort()
import numpy as np d = np.array([[1.2,0.5,0.1,0.9],[3,5,8,6]], dtype=np.float32) print(d) print(d[0]) print(np.argsort(d[0])) ### output: [[1.2 0.5 0.1 0.9] [3. 5. 8. 6. ]] [1.2 0.5 0.1 0.9] [2 1 3 0] 其中 argsort 结果不正确,如果 argsort 输出结果是标号,那么应该输出[3,1,0,2]才对,印象里以前用 numpy 排序就是 argsort 搞的,这次知道为啥用不对了,有无大佬帮看一眼。
另问一下逆序排序的办法,stackoverflow 上说用 np.fliplr()反转结果,感觉不太对啊
1 disk 2022-03-03 19:32:09 +08:00 重新排序,直接传入需要顺序的切片就行了。 argsort 结果没问题,你搞错功能了,标号指定是元素下标不是排名号 |
2 necomancer 2022-03-04 02:20:17 +08:00 1. 按行排列,用 argsort 以第一行排的话 a[:, np.argsort(a[0])] 2. 按列排行,用 argsort 以第二列排的话 a[np.argsort(a.T[1]),:] 3. 逆序排序好像挺反人类的,arr[::-1].sort() 会原位逆序排序(即 id(arr) 和先 arr[::-1].sort()再 id(arr) 会一样)。但如果用 argsort,得 np.argsort(a[0])[::-1] |
3 dongxiao 2022-03-04 09:49:57 +08:00 ``` d[:, d.argsort(axis=1)[0]] ``` |