找到一个numpy模式向量

时间:2017-09-07 18:15:53

标签: python numpy scipy

我有一个numpy数组的单热矢量。我想找到这些单热矢量的模式。请注意,这不等于在值上查找模式。

e.g。为了

x = [[0,0,0,1],
     [0,0,0,1],
     [0,0,1,0],
     [0,1,0,0],
     [1,0,0,0]]

assert vector_mode(x) == [0,0,0,1]
assert scipy.stats.mode(x) == [0,0,0,0]

使用numpy / scipy执行此操作的最有效方法是什么?

2 个答案:

答案 0 :(得分:2)

我们将one-hot向量作为2D输入数组的行进行处理。因此,每行的argmax对于每个单热矢量都是唯一的。得到那些。然后,得到他们的计数。具有max argmax计数的任何行都是所需的模式行输出。让我们先选择那些再使用argmax的那些,最后将索引转换为2D输入。

因此,一个实现 -

idx = np.argmax(x,1)
count = np.bincount(idx)
out = x[(idx==count.argmax()).argmax()]

答案 1 :(得分:1)

如果您的矢量是一热的,您可以使用argmax来获取热点的索引并计算其模式:

hot = np.argmax(x, axis=1)
mode = scipy.stats.mode(hot).mode

在这种情况下,mode3,这意味着最常见的向量在索引3中有一个热点。

如果要将其恢复为单热矢量,可以执行以下操作:

vec = np.zeros(4)
vec[mode] = 1