我有一个二维 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]
