使用多个一维数组从argsort获取值?

时间:2019-01-25 10:26:04

标签: python numpy

当尝试从argsort返回多个一维数组的结果时,我从结果中获得了新的维度。有人可以解释为什么会发生这种情况,我该怎么做才能重现结果?

np.random.seed(3)

M = np.random.rand(3,3)

array([[0.5507979 , 0.70814782, 0.29090474],
       [0.51082761, 0.89294695, 0.89629309],
       [0.12558531, 0.20724288, 0.0514672 ]])


idx = M.argsort(axis=1)
idx
array([[2, 0, 1],
       [0, 1, 2],
       [2, 0, 1]], dtype=int64)

M[idx] 
array([[[0.12558531, 0.20724288, 0.0514672 ],
        [0.5507979 , 0.70814782, 0.29090474],
        [0.51082761, 0.89294695, 0.89629309]],

       [[0.5507979 , 0.70814782, 0.29090474],
        [0.51082761, 0.89294695, 0.89629309],
        [0.12558531, 0.20724288, 0.0514672 ]],

       [[0.12558531, 0.20724288, 0.0514672 ],
        [0.5507979 , 0.70814782, 0.29090474],
        [0.51082761, 0.89294695, 0.89629309]]])

M[idx]给我的形状是(3,3,3),而不是(3,3)。但是1D数组很吸引人,我可以轻松地在argsort之后重现结果。

我想要这样的结果:

array([[0.29090474, 0.5507979, 0.70814782],
       [0.51082761, 0.89294695, 0.89629309],
       [0.0514672, 0.12558531, 0.20724288]])

0 个答案:

没有答案