1 回答

TA貢獻1831條經驗 獲得超4個贊
首先確保我們知道如何argsort申請ranks:
In [222]: ranks = np.random.randint(0,10,(4,5))
...: unsorted = np.random.randint(0,10,(4,5))
...:
...: ind = np.argsort(ranks,axis = 1)
In [223]: ranks
Out[223]:
array([[5, 9, 4, 8, 6],
[8, 6, 7, 3, 1],
[1, 2, 3, 4, 8],
[6, 0, 0, 5, 0]])
In [224]: ind
Out[224]:
array([[2, 0, 4, 3, 1],
[4, 3, 1, 2, 0],
[0, 1, 2, 3, 4],
[1, 2, 4, 3, 0]])
In [225]: np.take_along_axis(ranks, ind, axis=1)
Out[225]:
array([[4, 5, 6, 8, 9],
[1, 3, 6, 7, 8],
[1, 2, 3, 4, 8],
[0, 0, 0, 5, 6]])
這里每一行都是有序的。
pre-take_along 方法(仍然可以正常工作)是:
In [226]: ranks[np.arange(4)[:,None], ind]
Out[226]:
array([[4, 5, 6, 8, 9],
[1, 3, 6, 7, 8],
[1, 2, 3, 4, 8],
[0, 0, 0, 5, 6]])
顯然我們可以將其應用于unsorted,盡管我知道您所說的 top 是什么意思two rows。two rows[226]是什么?
對二維數組進行排序很棘手;很難想象正在發生的事情。我更改了您的示例以使用整數和小形狀來更好地可視化操作。
unsorted[ind]是不正確的。 ind在本例中,值為 0...4,即列數。它不能用于索引第一個維度(行)。在我的簡化示例中,4 太大了。您的示例運行,但形狀為 off (10,5,5)。
添加回答
舉報