我有一个阵列
a =[0, 0, 15, 17, 16, 17, 16, 12, 18, 18]
我试图找到有max
计数的元素值.如果有平局,我希望所有具有相同max
计数的元素.
你可以看到有两个0,两个16,两个17,两个18一个15和一个12所以我想要的东西会返回
[0, 16, 17, 18]
(顺序不重要,但我不想要15或12)
我正在做np.argmax(np.bincount(a))
但argmax
只返回一个元素(根据其文档)所以我只得到第一个为0
我尝试过
np.argpartition(values, -4)[-4:]
这种方法,但实际上我不知道有4个元素具有相同的计数!(也许我在这附近!!!灯泡刚刚开始!!!)
您可以使用 np.unique来获取计数和唯一元素的数组,然后拉出计数等于max的元素:
import numpy as np a = np.array([0, 0, 15, 17, 16, 17, 16, 12, 18, 18]) un, cnt = np.unique(a, return_counts=True) print(un[cnt == cnt.max()]) [ 0 16 17 18]
un是唯一的元素,cnt是每个元素的频率/数量:
In [11]: a = np.array([0, 0, 15, 17, 16, 17, 16, 12, 18, 18]) In [12]: un, cnt = np.unique(a, return_counts=True) In [13]: un, cnt Out[13]: (array([ 0, 12, 15, 16, 17, 18]), array([2, 1, 1, 2, 2, 2]))
cnt == cnt.max()
将为我们提供掩码来拉出等于最大值的元素:
In [14]: cnt == cnt.max() Out[14]: array([ True, False, False, True, True, True], dtype=bool)