2024-04-19 18:31:31 发布
网友
假设我有这样一个数组:
np.array([1., 1., 0.], [0., 4., 0.], [8., 0., 8.], [0., 0., 0.], [5., 0., 0.], [2., 2., 2.]])
[0]列和为16,列[1]到6,列[2]到10。在
如何在Numpy中有效地按列值从大到小重新排列数组?在上面的例子中,列[0]将保持不变,列[1]和列[2]将切换位置。在
交换最后两列的方法如下:
a = np.array([[1., 1., 0.], [0., 4., 0.], [8., 0., 8.], [0., 0., 0.], [5., 0., 0.], [2., 2., 2.]]) result = a[:, [0, 2, 1]]
因此,您需要根据列和计算这些索引[0, 2, 1]。在
[0, 2, 1]
这将得到所有列的总和:
从中可以得到排序的索引:
np.argsort(np.array([16., 7., 10.])) # [1, 2, 0]
您需要将其翻转以获得从最高到最低的顺序:
np.flip([1, 2, 0]) # [0, 2, 1]
所以,总而言之,就是:
result = a[:, np.flip(np.argsort(a.sum(axis=0)))]
您可以尝试sum沿着axis=0使用argsort,然后反转数组并使用:
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.]])
使用np.sum和np.argsort的组合可以实现以下目的:
np.sum
np.argsort
x = np.array([[1., 1., 0.],[0., 4., 0.],[8., 0., 8.],[0., 0., 0.],[5., 0., 0.],[2., 2., 2.]]) x[:, np.argsort(-np.sum(x, 0))] array([[ 1., 0., 1.], [ 0., 0., 4.], [ 8., 8., 0.], [ 0., 0., 0.], [ 5., 0., 0.], [ 2., 2., 2.]])
交换最后两列的方法如下:
因此,您需要根据列和计算这些索引
[0, 2, 1]
。在这将得到所有列的总和:
^{pr2}$从中可以得到排序的索引:
您需要将其翻转以获得从最高到最低的顺序:
所以,总而言之,就是:
您可以尝试
sum
沿着axis=0
使用argsort
,然后反转数组并使用:使用
np.sum
和np.argsort
的组合可以实现以下目的:相关问题 更多 >
编程相关推荐