Numpy求众数(mode)

所谓众数(mode)就是数列中出现次数最多的数,比如在[0, 1, 1, 3, 1, 7, 2, 4]中, 1出现了3次,其他的数出现次数均小于3次,因此1是众数。

如何用Python求某个数列的众数呢?首先想到用numpy直接求。

很遗憾,Numpy中没有直接诸如np.mean()求均值,np.median()求中位数等可以直接求众数的方法,但可以用np.bincount()函数和np.argmax()共同实现,过程也很简单。

1.np.bincount()函数

简单解释下该函数的功能,还是以[0, 1, 1, 3, 1, 7, 2, 4]为例:

(1)np.bincount()函数首先会找出数组[0, 1, 1, 3, 1, 7, 2, 4]中的最大值,很明显是7,它会统计0,1,2,3,4,5,6,7这8个数在[0, 1, 1, 3, 1, 7, 2, 4]中出现的次数然后以数组形式返回,这个返回数组的索引(index)刚好就是0-7这8个数,而索引对应的值(value) 正是该索引出现的次数,详细来说就是0出现1次,1出现3次,2出现1次,3出现1次,4出现1次,5出现0次,6出现0次,7出现1次,如下表所示:

import numpy as np
nums = [0,1,1,3,1,7,2,4]
countList = np.bincount(np.array(nums))
print(countList)

结果和我们自己手动统计的是一样的

array([1, 3, 1, 1, 1, 0, 0, 1], dtype=int64)

(2)那如何取出众数1了?很简单,1不就是数组[1, 3, 1, 1, 1, 0, 0, 1]中最大值3对应索引吗?

np.argmax(nums)函数刚好可以返回数组nums中最大值的索引。

mode = np.argmax(countList)
print(f'数组{nums}的众数为:{mode},出现了{np.max(countList)}次')

数组[0, 1, 1, 3, 1, 7, 2, 4]的众数为:1,出现了3次

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值