给定多个预测向量,如何高效地获取得票最多的标签(在numpy/pytorch中)?

Given multiple prediction vectors, how to efficiently obtain the label with most votes (in numpy/pytorch)?

我有 3 个向量代表相同数据的标签的 3 个不同预测:

P1=[31, 22, 11, 10,  9, 9, 0, 0, 23 ....]  # length over 1M
P2=[31, 22, 12, 10,  8, 9, 0, 0, 30 ....]  # length over 1M
P3=[30, 22, 12, 11,  8, 9, 0, 1, 31 ....]  # length over 1M

Ans= [31, 22, 12, 10, 8, 9, 0, 0, 23, ....]

基本思路是,如果预测的票数最高(例如“31”在第一列中的票数为 2),我们就会选择它,但如果所有候选人的票数都不同(例如“23”、“ 30", "31" 在最后一列),我们可以选择其中的任何一个。

这些向量可能是numpy数组、列表或pytorch张量。考虑到此类向量的长度超过 1000,000,找到 Ans 的最有效方法(主要是运行时)是什么?

使用scipy.mode

import numpy as np
from scipy.stats import mode

combined = np.array([P1, P2, P3])
majority_vote = mode(combined)[0]

你可以取张量的mode

t = torch.tensor([P1,P2,P3])
t.mode(0).values
tensor([31, 22, 12, 10,  8,  9,  0,  0, 23])