如何有效地订购一个numpy矩阵

How to efficiently order a numpy matrix

我有这个 numpy 数组

matrix = np.array([[ 0.8,  0.2,  0.1],
   [ 1. ,  0. ,  0. ],
   [ 0. ,  0. ,  1. ]])

我想过滤到 return,对于 matrix 的每一行,索引按值递减顺序排列。

例如,这将是

np.array([[0, 1, 2], [0, 1, 2], [2, 0, 1]])

我知道我可以使用 np.argsort,但这似乎不是 return 正确的输出。我尝试将 axis 更改为不同的值,但这也无济于事。

我认为 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]])

获得所需输出的最简单方法可能是:

(-matrix).argsort(axis=1)
# array([[0, 1, 2],
#        [0, 1, 2],
#        [2, 0, 1]])