求众数的几种方法

求众数的几种方法

如何查找众数

方法一,利用np.bincount()方法二,利用scipy.stats.mode()方法三,利用for循环求解

众数简单来说就是一组数中出现次数最多的那个数(

不少于一个)。比如[1,2,3,2]的众数是2,[1,2,3,2,3]的众数是2,3。

首先假设一组数

[1,2,3,2,4,2,6,3]

方法一,利用np.bincount()

代码如下:

import numpy as np

list1 = [1, 3, 2, 4, 2, 6, 2]

list2 = [1, 3, 2, 4, 2, 6, 2, 3, 3]

counts1 = np.bincount(list1) # 返回值是索引从零递增,值是索引出现的次数,比如[3,0,2]代表0出现3次、1出现0次、2出现2次。

counts2 = np.bincount(list2)

'''众数只有一个的情况'''

Mode1 = np.argmax(counts1) # 2

'''众数一个或多个的情况'''

Mode2 = [i for i, j in enumerate(counts2) if j == max(counts2)] # [2,3]

方法二,利用scipy.stats.mode()

这个方法只能计算单个众数的情况。 代码如下:

from scipy import stats

list1 = [1, 3, 2, 4, 2, 6, 2]

list2 = [1, 3, 2, 4, 2, 6, 2, 3, 3]

'''众数只有一个的情况'''

Mode1 = stats.mode(list1)[0][0] # 2 其中stats.mode(list1)[0][0]是返回众数,stats.mode(list1)[1][0]是返回众数出现的次数。

'''众数多个的情况(只能返回最小的那个,会出错)'''

Mode2 = stats.mode(list1)[0][0] # 2 结果错误,是因为stats.mode(list)[0][0] 的返回值是出现次数做多的那个,相同次数有多个时只返回最小的那个数。

方法三,利用for循环求解

代码如下:

list1 = [1, 3, 2, 4, 2, 6, 2]

list2 = [1, 3, 2, 4, 2, 6, 2, 3, 3]

list11 = list(set(list1)) # 去除重复数后的列表

list22 = list(set(list2)) # 去除重复数后的列表

'''众数只有一个的情况'''

num = [] # 记录各个数出现的次数

for i in list11 :

num.append(list1 .count(i))

Mode1 = [list11[i] for i, j in enumerate(num) if j == max(num)]

'''众数一个或多个的情况'''

num = [] # 记录各个数出现的次数

for i in list22 :

num.append(list2.count(i))

Mode2 = [list22 [i] for i, j in enumerate(num) if j == max(num)]

欢迎指出错误^ _ ^

相关文章

365bet亚洲真人 替补杀手上演世界杯绝唱 拉尔森点球射失尴尬谢幕
365500 田英章 书法

田英章 书法

🗓️ 08-02 👁️ 182
365500 Hoyu Malaysia

Hoyu Malaysia

🗓️ 07-11 👁️ 4435
beat365倍率 持续连击

持续连击

🗓️ 07-04 👁️ 1040
365500 宙斯明显不如多兰,也不知道怎么吹出来的…
365500 雷军到底有多少钱?几千万都是零头!