如何解决如何按总和最大的列对二维 numpy 数组进行排序
我有一个形状为 (35,6004) 的二维数组,我想根据列的总和对其进行排序。所以如果我有例如
array([[5,3,13],[1,2,20],[6,6]])
我想对我的数组进行排序
array([[13,5,3],[20,1,2],6,2]]).
我试图找到列的索引
def find_max_col(o):
t = o.sum(axis=0)
te = t.tolist()
return te.index(t.max())
然后我使用该函数的输出对数组进行排序
test = array[array[:,find_max_col(array)].argsort()]
并执行此操作以检查是否成功
t1 = test.sum(axis=0)
print(t1)
据我所知,如果我根据总和最大的列进行排序,我应该得到一个数组,该数组以降序形式显示所有列的总和,作为上述代码的输出。
我的代码是否用于检查是否工作错误,我是否在排序中犯了错误,或者我什至没有找到要排序的列的正确索引?
解决方法
如果您想按总和的降序对列进行排序,请执行此操作。
idx = array.sum(axis=0).argsort()[::-1]
print(array[:,idx])
您的测试是正确的,但它没有给出正确答案的事实意味着您在其他地方犯了错误。由于您要对列进行排序,test
至少应该是
test = array[:,array[:,find_max_col(array)].argsort()]
碰巧 array[:,find_max_col(array)].argsort()
对于您的确切示例会产生正确的答案,但原因是错误的。您正在计算总和最高的列的排序索引,即 array[:,2] == array([13,20,6])
,当您应该按降序对列总和的索引进行排序时,即 array.sum(axis=0) == array([12,7,39])
。
我不确定您的解决方案是否不正确,但肯定比必要的复杂:
>>> a = np.array([[5,3,13],[1,2,20],[6,6]])
>>> a[:,a.sum(axis=0).argsort()] # sort columns small-to-large
array([[ 3,5,[ 2,1,6,(a.sum(axis=0)*-1).argsort()] # multiply sums by -1 to sort large-to-small
array([[13,3],[20,2],[ 6,2]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。