首页 > 解决方案 > numpy 数组 - 根据多行选择最大值

问题描述

我想为二维 numpy 数组编写一个函数 bestcolumn,它将执行以下操作 - 选择第 0 行中具有最大值的列,如果第 0 行中有多个具有最大值的值,则在它们之间选择具有最大值的列在第 1 列中,然后对第 2 列应用相同的内容。

在下面的示例中,4 是第 0 行中的最大值,但是 0、1、2 三列具有相同的值 4,因此我们在第 1 行中搜索第 0、1、2 列。第 1,2 列中的最大值为 5。然后我们在 col 2 中搜索 tiebreaker 并选择 col 2

有没有办法使用 numpy 的矢量化操作(而不是使用 for 循环和 if/else 语句)来实现这一点?

import numpy as np

A = np.asarray([[4,4,4,3],
                [3,5,5,7],
                [2,3,4,10]])

标签: pythonnumpy

解决方案


一种方法是使用numpy.lexsort但它对所有列进行排序不仅找到最大的列。

np.lexsort(-A.T)[0]
# 2

推荐阅读