根据总和对数组列进行排序

Jam*_*mes 4 python numpy

假设我有一个这样的数组:

np.array([1., 1., 0.],
       [0., 4., 0.],
       [8., 0., 8.],
       [0., 0., 0.],
       [5., 0., 0.],
       [2., 2., 2.]])
Run Code Online (Sandbox Code Playgroud)

column[0] 总和为 16,column[1] 为 6,column[2] 为 10。

如何在 Numpy 中有效地按最大到最小的列值重新排列数组?在上面的示例中,column[0] 将保持原位,而 column[1] 和 column[2] 将交换位置。

San*_*apa 5

你可以试试sum一起axis=0并用argsort,然后逆转数组和使用:

a[:,np.argsort(a.sum(axis=0))[::-1]]

array([[1., 0., 1.],
       [0., 0., 4.],
       [8., 8., 0.],
       [0., 0., 0.],
       [5., 0., 0.],
       [2., 2., 2.]])
Run Code Online (Sandbox Code Playgroud)