如何有效地订购一个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]])
我有这个 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]])