Skip to main content
 首页 » 编程设计

python之给定列的 Numpy 最小值

2024年10月01日12jyk

我有一个二维 numpy 数据数组,其中包含有关我正在跟踪的元素对的对称信息,非常类似于锦标赛中的循环赛。保持这个类比,每个玩家占据一行,列数据是他们对给定对手的得分。由于“遗留”原因,所有分数都将是正数,除了对自己的分数为 0。

假设我想找到给定球员的最差得分,同时返回得分和他们为该得分打过的对手。我该怎么做?

平庸的版本可能是这样的:

minimum = float('inf') 
min_opp = None 
for opponent_id in player_ids: 
    if opponent_id != player_id: 
        score = match_matrix[player_id, opponent_id] 
        if score < minimum: 
            minimum = score 
            min_opp = opponent_id 
return minimum, min_opp 

但这根本没有使用 numpy 的强大功能。我觉得应该有一个简单的解决方案,但我似乎找不到。

score = np.min(match_matrix[player, :]) 

给出了 self 评分,我不太能把代码从this answer正常工作。

谢谢!

编辑:This answer提供了很好的想法,但只获取整个数组的最小值,而不是一行。

请您参考如下方法:

您可以选择给定的行,屏蔽掉 self 得分并返回余数的最小值。基本上你做了什么,但有一个额外的屏蔽步骤。我还建议使用 np.argmin而不是 np.min 因为它返回最小值的索引,在这种情况下它提供的信息更多:

mask = np.ones(match_matrix.shape(1), dtype=np.bool) 
mask[player] = False 
opponent = np.argmin(match_matrix[player, mask]) 
if opponent >= player: 
    opponent += 1 
score = match_matrix[player, opponent]