python - Numpy max 仅在对数组的第一个元素上
问题描述
我有一个由元组组成的多维 numpy 数组,如下所示:
[[(0.56, 1),(0.25, 4), ...],[(0.11, 9), ...], ...]
每个元组的第二个元素是索引引用。我想提取每行第一个值最高的元组。有没有办法用 numpy max 实现这一点?
我尝试过的一件事是使用如下的轴参数:
np.max(my_array, axis=0)
但这会在未保留索引引用的对周围进行洗牌。例如,上面示例中的第一行将显示类似的[(0.56,4), ...]
内容,而我希望它显示[(0.56,1), ...]
解决方案
不要在 numpy 数组中使用元组。将其全部转换为最后一维为 2 的 numpy 数组:
>>> a = np.array([[(0.56, 1), (0.25, 4)],[(0.11, 9), (0.19, 5)]])
>>> a.shape
(2, 2, 2)
然后:
>>> highest_val_per_row = np.argmax(a[:,:,0], axis=1)
>>> a[np.arange(a.shape[0]), highest_val_per_row]
array([[0.56, 1. ],
[0.19, 5. ]])
推荐阅读
- python-3.x - 更新嵌套字典python3时的错误行为
- java - RxJava:是否可以将 Completable 执行构建到 doOnSuccess 或类似中
- android - 防止导航图标android上的工具栏标题
- parallel-processing - MPI CPU 绑定到特定内核范围
- android - 我们可以自定义导航栏的高度吗?
- java - 如何通过 adb 命令使用 android DisplayManager 服务的显示管理器命令
- git - 我如何(如果可以)使用 git 来进行小型源代码测试?
- c++ - gcc 和非命名空间范围内的显式特化
- java - 无法在 Spring Boot 中自动装配 resttemplate
- sql-server - 尝试修改数据库图时 SSMS 崩溃(v18.5)