python - 如何获取python多维np数组中所有最大值的索引
问题描述
我想从 ndarray 中获取每一行的最大值的所有索引。例如,我有
arr = np.array([[1, 3, 3], [1, 5, 4]])
我想从第一行获取所有 3 的索引,从第二行获取所有 5 的索引。
np.where(((arr == arr[0].max()) | (arr == arr[1].max())))
它返回
(array([0, 0, 1], dtype=int64), array([1, 2, 1], dtype=int64))
我想要类似的东西,但对于任何数量的行都更通用。因为np.where(arr == arr.argmax())
不像我想要的那样工作。它只返回它在每一行中遇到的第一个最大值的索引。
解决方案
@Paul 在评论中的回答可能是你能找到的最好的答案。写给读者看。arr.max(1)
在每一行中找到最大值,并在每一行arr==arr.max(1,keepdims=True)
中找到等于该行中对应最大值的所有元素。最后nonzero
返回这些元素的索引:
(arr==arr.max(axis=1,keepdims=True)).nonzero()
OP示例的输出:
(array([0, 0, 1]), array([1, 2, 1]))
推荐阅读
- sql - DB2 分组和排序
- excel - 绕过代码以在单元格为空的地方插入单元格值
- typescript - 为什么打字稿将空字符串添加到条件返回的联合中?
- c# - 创建指向从程序集中动态加载的类的路由时出现问题?
- java - 依赖注入和@DependsOn 的区别
- php - php7.4、php7.4-fpm、http2、Apache、nginx
- javascript - 使用 javascript 加载外部页面的一部分
- templates - 在从 MailChimp 发送的 Outlook 上强制图像渲染和下载?
- apache-kafka - 当我使用基于时间的保留策略时,如果将“log.cleanup.policy”设置为“删除”和“压缩”,数据日志会发生什么情况
- flutter - 颤振等待来自firestore bool的信号