我想按行值对以下矩阵进行排序:
a = array([[1, 4, 6],
[5, 3, 7],
[8, 4, 1]])
如
a = array([[6, 4, 1],
[7, 5, 3],
[8, 4, 1]])
我可以使用
np.argsort(-a)
获取排序索引,它返回以下索引矩阵:
>>> a_idx = np.argsort(-a)
array([[2, 1, 0],
[2, 0, 1],
[0, 1, 2]])
但是使用这些索引来重新排列原始矩阵对我来说并没有发生。
>>> a[a_idx]
array([[[8, 4, 1],
[5, 3, 7],
[1, 4, 6]],
[[8, 4, 1],
[1, 4, 6],
[5, 3, 7]],
[[1, 4, 6],
[5, 3, 7],
[8, 4, 1]]])
如何高效地完成这样的任务?提前非常感谢。
尝试一下,使用
.take_along_axis()
方法,
>>> a = np.array([[1, 4, 6],
[5, 3, 7],
[8, 4, 1]])
>>> a_idx = np.argsort(-a)
输出:
>>> np.take_along_axis(a, a_idx, axis=1)
array([[6, 4, 1],
[7, 5, 3],
[8, 4, 1]])
另一种方法
import numpy as np
a = np.array([[1, 4, 6],
[5, 3, 7],
[8, 4, 1]])
print(np.sort(-a,axis=1)*-1)
Try this one.
import numpy as np
a = np.array([[1, 4, 6],
[5, 3, 7],
[8, 4, 1]])
np.sort(-a)*-1
Out
Array([[6, 4, 1],
[7, 5, 3],
[8, 4, 1]])