python - 如何按数组元素的第一项排序?
问题描述
假设我有一个表格数组
a = [
[ [12, 4, 2, 5] , [10, 12, 4, 2], [2, 2, 10, 2], [7, 10, 3 ,2] ],
[ [13, 23, 4, 5] , [10, 12, 4, 2], [2, 2, 12, 1], [7, 10, 3 ,2] ],
[ [4, 4, 2, 5] , [10, 12, 4, 2], [2, 2, 3, 2], [7, 10, 3 ,2] ],
]
我想按每个元素的第一列进行排序,因此第一个条目a
将显示为:
[ [2, 2, 10, 2], [7, 10, 3 ,2], [10, 12, 4, 2], [12, 4, 2, 5] ]
我找到了一个看起来像的解决方案,a[a[:,1].argsort()]
并在第一个索引上尝试了一个 for 循环,例如:
for i in range(0,4):
a[i,...] = a[a[i,0,:].argsort()]
或者
for i in range(0,4):
a[i,...] = a[i, a[i,0,:].argsort()]
这行不通。我真的无法解决这个问题。
解决方案
您可以使用argsort
沿第一列索引的数组,并适当地扩展 dims,然后np.take_along_axis
:
ixs = a[...,0].argsort(1)[...,None]
np.take_along_axis(a, ixs, 1)
array([[[ 2, 2, 10, 2],
[ 7, 10, 3, 2],
[10, 12, 4, 2],
[12, 4, 2, 5]],
[[ 2, 2, 12, 1],
[ 7, 10, 3, 2],
[10, 12, 4, 2],
[13, 23, 4, 5]],
[[ 2, 2, 3, 2],
[ 4, 4, 2, 5],
[ 7, 10, 3, 2],
[10, 12, 4, 2]]])
推荐阅读
- angular - 如果耳机是插件,则录制语音
- python - 当我第一次运行它时,它运行良好。但现在没有了。如果当前字符串开头不包含 is'',我想添加'is'
- node.js - 如何获取数组中具有特定值的所有文档?
- discord - 为 discord.js 设置嵌入的反应角色时遇到问题
- html - 在不使用绝对值的情况下获得绝对行为
- python - 如何修复跨数组的python乘法错误
- css - 赛普拉斯测试字体中缺少的符号
- android - 带有过滤器的Android自定义列表视图不起作用
- ruby - Logstash 支持 BCFIPS 吗?如果是这样如何使 Log Stash 插件与 BFIPS 兼容?
- ruby-on-rails - rake routes 命令不起作用 - rake 版本 13.0.3