假设我有以下NumPy数组:
a = np.array([1,2,3,1,2,1,1,1,3,2,2,1])
如何在这个数组中找到最频繁的数字?
发布于 2011-06-06 21:01:20
如果你的列表包含所有非负整数,你应该看看numpy.bincounts:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.bincount.html
然后可能使用np.argmax:
a = np.array([1,2,3,1,2,1,1,1,3,2,2,1])
counts = np.bincount(a)
print(np.argmax(counts))
对于更复杂的列表(可能包含负数或非整数值),可以以类似的方式使用np.histogram
。或者,如果您只想在python中工作而不使用numpy,那么collections.Counter
是处理这类数据的好方法。
from collections import Counter
a = [1,2,3,1,2,1,1,1,3,2,2,1]
b = Counter(a)
print(b.most_common(1))
发布于 2015-02-26 15:29:49
您可以使用
values, counts = np.unique(a, return_counts=True)
ind = np.argmax(counts)
print(values[ind]) # prints the most frequent element
ind = np.argpartition(-counts, kth=10)[:10]
print(values[ind]) # prints the 10 most frequent elements
如果某个元素与另一个元素一样频繁,则此代码将只返回第一个元素。
发布于 2011-06-06 21:10:09
如果您愿意使用SciPy
>>> from scipy.stats import mode
>>> mode([1,2,3,1,2,1,1,1,3,2,2,1])
(array([ 1.]), array([ 6.]))
>>> most_frequent = mode([1,2,3,1,2,1,1,1,3,2,2,1])[0][0]
>>> most_frequent
1.0
https://stackoverflow.com/questions/6252280
复制相似问题