我有这个numpy数组
matrix = np.array([[ 0.8, 0.2, 0.1],
[ 1. , 0. , 0. ],
[ 0. , 0. , 1. ]])
我想过滤以返回matrix
的每一行,索引以降序排列。
例如,应该是
np.array([[0, 1, 2], [0, 1, 2], [2, 0, 1]])
我知道我可以使用np.argsort
,但这似乎并没有返回正确的输出。我尝试将axis
更改为其他值,但这也无济于事。
答案 0 :(得分:2)
获得所需输出的最简单方法可能是:
(-matrix).argsort(axis=1)
# array([[0, 1, 2],
# [0, 1, 2],
# [2, 0, 1]])
答案 1 :(得分:1)
我认为np.argsort确实可以解决问题,您只需要确保水平翻转矩阵以使其降序即可:
>>>matrix = np.array(
[[ 0.8, 0.2, 0.1],
[ 1. , 0. , 0. ],
[ 0. , 0. , 1. ]])
>>> np.fliplr(np.argsort(matrix))
array([[0, 1, 2],
[0, 2, 1],
[2, 1, 0]])
这应该是正确的输出,除非您对排序关系有任何要求。现在,翻转将使最右边的领带成为第一个索引。如果要匹配确切的输出,则最左边的索引首先在此处,您可以做些杂耍:
# Flip the array first and get the indices
>>> flipped = np.argsort(np.fliplr(matrix))
# Subtract the width of your array to reverse the indices
# Flip the array to be in descending order
>>> np.fliplr(abs(flipped - flipped.shape[1]))
array([[0, 1, 2],
[0, 1, 2],
[2, 0, 1]])