python - 如何按总和最大的列对二维 numpy 数组进行排序
问题描述
我有一个形状为 (35,6004) 的二维数组,我想根据列的总和对其进行排序。所以如果我有例如
array([[5, 3, 13],
[1, 2, 20],
[6, 2, 6]])
我想把我的数组排序成这样
array([[13, 5, 3],
[20, 1, 2],
[6 , 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])
。
推荐阅读
- micronaut - Micronaut 中的基类注入何时发生
- python - 给定根节点,是否有一种遍历路径的新模型方法?
- javascript - 如何在 Angular 循环中运行下一个服务调用之前等待对我的控制器的每个服务调用?
- excel-formula - Sumif 行并向下拖动以增加列(索引 - 匹配)
- python - 我可以在条件后使用熊猫提取行吗?
- javascript - 如何每 6 小时执行一次函数?
- python - 使用 asyncpg 限制与 Postgres 数据库建立的连接数?
- algorithm - 如何最小化 n 人在 m 个位置上的距离
- ios - 如果快速触发按钮上的长按手势,如何获取按钮文本?
- mongodb - MongoDB ODM 聚合生成器(最小值,最大值)- 跳过 0