需求:以某行或某列为 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 1
重新排序,直接传入需要顺序的切片就行了。
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]] ``` |