在numpy数组中查找最常见的子数组

时间:2018-04-06 14:16:18

标签: python numpy

示例数据:

array(
  [[ 1.,  1.],
   [ 2.,  1.],
   [ 0.,  1.],
   [ 0.,  0.],
   [ 0.,  0.]])

具有期望的

结果
>>> [0.,0.]

ie)最常见的一对。

看似不起作用的方法:

使用statistics作为numpy数组是不可用的。

使用scipy.stats.mode作为返回每个轴的模式,例如)对于我们的示例,它给出了

mode=array([[ 0.,  1.]])

2 个答案:

答案 0 :(得分:8)

您可以使用pauseOnFocus: false, pauseOnHover: false 函数{/ 1}}使用numpy高效执行此操作:

unique

返回:pairs, counts = np.unique(a, axis=0, return_counts=True) print(pairs[counts.argmax()])

答案 1 :(得分:2)

通过标准库的一种方法是使用collections.Counter

这为您提供了最常见的配对和计数。在[0]上使用Counter.most_common()索引来检索最高计数。

import numpy as np
from collections import Counter

A = np.array(
  [[ 1.,  1.],
   [ 2.,  1.],
   [ 0.,  1.],
   [ 0.,  0.],
   [ 0.,  0.]])

c = Counter(map(tuple, A)).most_common()[0]

# ((0.0, 0.0), 2)

唯一的复杂因素是您需要转换为tuple,因为Counter只接受可散列对象。