精华内容
下载资源
问答
  • Python numpy求众数

    万次阅读 2018-05-05 18:23:26
    可以分别均值,中位数,但是却没有numpy.mode()求众数的函数。 那么如何求众数呢。当然是用 numpy.bincount。 可见bitcount返回数组值从0到最大值,各个值出现的个数。 要得到众数,直接找到返回...

    numpy.mean()
    numpy.median()

    可以分别求均值,中位数,但是却没有numpy.mode()求众数的函数。

    那么如何求众数呢。当然是用

    numpy.bincount。

     

     

     

     

     

    可见bitcount返回数组值从0到最大值,各个值出现的个数。

    要得到众数,直接找到返回数组里最大值,其索引值就是众数值。

    import numpy as np
    a=np.array([1,2,3,5,6,6,6,4,7,8])
    np.bincount(a)
    #array([0,1,1,1,1,1,3,1,1])

     

     

     

     

     

     

    展开全文
  • 给定一个大小为 n 的数组,找到其中的众数众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。... 遍历字典出出现次数大于len(nums)//2 三、源码 # ...

    给定一个大小为 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

    你可以假设数组是非空的,并且给定的数组总是存在众数。

    示例1:

    输入: [3,2,3]
    输出: 3

    示例2:

    输入: [2,2,1,1,1,2,2]
    输出: 2

    二、实现思路

    1. 计算出每个数字出现的次数并存入字典
    2. 遍历字典求出出现次数大于len(nums)//2

    三、源码

    # _*_ coding:utf-8 _*_
    '''
        @author:xianyt
        @date:2018/
        @func:
        给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
    
        你可以假设数组是非空的,并且给定的数组总是存在众数。
    '''
    class Solution(object):
        def majorityElement(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            count = {}
            for i in nums:
                if i in count.keys():
                    count[i] += 1
                else:
                    count[i] = 1
            n = len(nums)/2
            for key,value in count.items():
                if value >= n:
                    return key
    if __name__ == "__main__":
        solu = Solution()
        print(solu.majorityElement([3,2,3]))
        print(solu.majorityElement([2,2,1,1,1,2,2]))
        

    四、扩展

    提交完成之后看了一眼其他人的做法,才现在其实只要一步就可以。

    审题:     给定的数组总是存在众数。而且众数是出现次数为nums//2

    return sorted(nums)[len(nums)/2]

     

    展开全文
  • 列表里出现次数最多的元素叫众数,使用python求众数目前没有直接的api,可以通过间接的方式求得众数,目前主要有以下几种方式。 暴力求解 # 暴力求解 import time login_list = [5, 8, 8, 5, 10, 9, 14, 16, 17, ...

    列表里出现次数最多的元素叫众数,使用python求众数目前没有直接的api,可以通过间接的方式求得众数,目前主要有以下几种方式。

    暴力求解

    # 暴力求解
    import time
    login_list = [5, 8, 8, 5, 10, 9, 14, 16, 17, 7, 9, 8, 9, 12, 16, 20, 9, 10, 6, 9, 18, 17, 8, 6, 9, 16, 18, 18]
    new_label = []
    time_start = time.time()
    n = 50000
    for i in range(n):
        count_dict = {}
        for i in login_list:
            if i in count_dict:
                count_dict[i] += 1
            else:
                count_dict[i] = 1
        dictSortList = sorted(count_dict.items(),key = lambda x:x[1], reverse = True)
        new_label.append(dictSortList[0][0])
    time_end = time.time()
    print("耗时:", time_end-time_start)
    print("平均单条耗时:", (time_end-time_start)/n)

    输出如下:

    耗时: 0.43876028060913086
    平均单条耗时: 8.775205612182618e-06

    为了对比时间更加公平,采用循环50000次的方式

    暴力求解方式原理简单,遍历列表里所有元素,统计每个元素出现的次数,再按照出现的次数排序,取出次数最多的元素即为众数,暴力求解的方式耗时0.43s,看到这里大家可能鄙夷这种方式,但是别嚣张,暴力求解并不代表效果最不好,有时候越简单越有效 ^_^

    pandas求解

    # pandas求解
    import pandas as pd
    new_label = []
    import time
    login_list = [5, 8, 8, 5, 10, 9, 14, 16, 17, 7, 9, 8, 9, 12, 16, 20, 9, 10, 6, 9, 18, 17, 8, 6, 9, 16, 18, 18]
    time_start = time.time()
    n = 50000
    for i in range(n):
        tmp = pd.DataFrame({"A": login_list})
        new_label.append(tmp["A"].mode()[0])
    time_end = time.time()
    print("耗时:", time_end-time_start)
    print("平均单条耗时:", (time_end-time_start)/n)

    输出如下:

    耗时: 32.47795557975769
    平均单条耗时: 0.0006495591115951538

    看到这耗时是不是感觉到amazing?Unbelievable?pandas求解原理主要是生成一个series或者dataframe,然后使用mode函数。对比下暴力求解时间,pandas是真tm慢呀,我最开始就是用的这种方式,结果60w的数据硬生生跑了好久没跑出来。

    scipy求解

    # scipy求解
    from scipy import stats
    import time
    new_label = []
    login_list = [5, 8, 8, 5, 10, 9, 14, 16, 17, 7, 9, 8, 9, 12, 16, 20, 9, 10, 6, 9, 18, 17, 8, 6, 9, 16, 18, 18]
    n = 50000
    time_start = time.time()
    for i in range(n):
        new_label.append(stats.mode(login_list)[0][0])
    time_end = time.time()
    print("耗时:", time_end-time_start)
    print("平均单条耗时:", (time_end-time_start)/n)

    输出如下:

    耗时: 7.2447569370269775
    平均单条耗时: 0.00014489513874053954
    

    看到这耗时是不是又一次amazing?Unbelievable?scipy求解原理和pandas类似,也是使用mode函数。对比下暴力求解和pandas求解,scipy也是慢。

    numpy求解

    # numpy求解
    import numpy as np
    import time
    new_label = []
    login_list = [5, 8, 8, 5, 10, 9, 14, 16, 17, 7, 9, 8, 9, 12, 16, 20, 9, 10, 6, 9, 18, 17, 8, 6, 9, 16, 18, 18]
    n = 50000
    time_start = time.time()
    for i in range(n):
        counts = np.bincount(login_list)
        new_label.append(np.argmax(counts))
    time_end = time.time()
    print("耗时:", time_end-time_start)
    print("平均单条耗时:", (time_end-time_start)/n)

    输出如下:

    耗时: 0.345947265625
    平均单条耗时: 6.9189453125e-06

    原来还是numpy靠谱,numpy求解的原理是使用np.bincount()函数把列表平铺开来,并且每个位置计数

    举个例子 a = [1,2,3,1]

    np.bincount(a) 的输出是 b = [0,2,1,1],b[0]代表a中0出现几次,由于a中没有0,所以b[0]=0;b[1]代表a中1出现2次,b[2]代表a中2出现1次,其余同理。看到这里聪明的同学会想到,假设a中有个元素很大,那这个展开的列表就会很长,耗时就会变大吧,没错,你想对了。

    假设 login_list = [5, 8, 8, 5, 10000],用numpy求解方式,耗时成倍增长,差于暴力求解:

    耗时: 0.9656193256378174
    平均单条耗时: 1.9312386512756348e-05

    总结

    求解方式暴力求解pandas求解scipy求解numpy求解
    耗时0.44s32s7.24s0.34s

    其中列表中元素值很大的话,建议暴力求解,否则建议numpy求解

    参考链接

    https://zhuanlan.zhihu.com/p/46661241

    展开全文
  • Python 实现求众数的三种方法

    千次阅读 2020-07-20 14:34:51
    给定一个长度为 n 的数组,返回众数众数:是指数组中出现次数超过 n/2 次的元素。 假设数组非空,众数一定存在。 Example 1: Input: [3,2,3] Output: 3 Example 2: Input: [2,2,1,1,1,2,2] Output: 2 1:...

     

    给定一个长度为 n 的数组,返回众数。众数:是指数组中出现次数超过 n/2 次的元素。

    假设数组非空,众数一定存在。

    Example 1:
    
    Input: [3,2,3]
    Output: 3
    Example 2:
    
    Input: [2,2,1,1,1,2,2]
    Output: 2

    1:字典,累记数组中出现的各元素的次数,一旦发现超过 n/2 次的元素就返回该元素

    def majorityElement(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            if len(nums)==1:
                return nums[0]
            numDic = {}
            for i in nums:
                if numDic.has_key(i):
                    numDic[i] += 1
                    if numDic.get(i)>=(len(nums)+1)/2:
                        return i
                else:
                    numDic[i] = 1

    2:利用 list.count() 方法判断(注意 for 循环中如果是访问整个 nums 列表会出现 “超出时间限制” 的错误)

    def majorityElement(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            for i in nums[len(nums)//2:]:
                if nums.count(i)>len(nums)//2:
                    return i

    3:利用sorted(nums)[len(nums)//2]

    def majorityElement(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            return sorted(nums)[len(nums)//2]

     

    展开全文
  • 给定一个大小为 n 的数组,找到其中的众数众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2,...
  • python求众数问题实例

    2021-01-20 05:25:42
    本文实例讲述了python求众数问题的方法,是一个比较典型的应用。分享给大家供大家参考。具体如下: 问题描述: 多重集中重数最大的元素称为众数…就是一个可以有重复元素的集合,在这个集合中重复的次数最多的那个数就...
  • 如何用Python求众数

    千次阅读 2020-09-18 20:32:47
    如何用Python求众数 在书里(参考文献[1])看到有这样的代码: max(set(A),key=A.count) 它可以返回列表A中的众数,现对其进行解释。 set 博客 python set() 用法.中提到:set() 函数用于创建一个无序不重复元素集,...
  • python 求众数 LeetCode N0.169 class Solution(object): def majorityElement(self, nums): """ :type nums: List[int] :rtype: int """ count = 0 candidate = ...
  • Python分组后求众数的方法

    千次阅读 2020-10-13 12:41:42
    平均数,中位数和众数是常用的表示数据水平的统计指标。当我们想要对比不同分组的数据的差异的时候,一般来说会用到平均数,但是平均数容易受到极端值的影响,这时候中位数和众数就是一个比较好的选择。 在pandas中...
  • python 1201: 众数问题

    2021-03-31 11:05:56
    from scipy import stats a=int(input()) b=[] for i in range(a): c=int(input()) b.append(c) d=stats.mode(b)[0][0] e=b.count(d) print(d) print(e)
  • 给定一个大小为 n 的数组,找到其中的众数众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: ...
  • Python学习——众数

    千次阅读 2017-12-24 14:35:47
    #适用条件:列表元素都是正整数 from numpy import * import numpy as np #v_list = [2,1,2,3,1] v_list = [3,1,2] print('v_list is : ',v_list) # 若 v_list[i] = k , 则 v_element_cnt_list[k] +=1 ## 即 v_...
  • python技巧之求众数

    千次阅读 2019-01-16 13:49:37
     采用取反的方式来中位数,排序后结果为l=[1,2,3,4,5,6,7,8,9,10],长度为10,half=10//2=5,x[5]为列表的第六位数,5的取反数为-6,x[-6]实际上是对列表进行反向查找,为列表中的第五位数,长度为偶数10时中值5+6/2...
  • 数据概括性度量:python求众数、中位数、分位数、平均数 import pandas as pd #众数 #方法一 df = pd.read_excel("./data/例4.3.xlsx") data = df['月收入'] print('使用方法一,众数为:',data.mode().iloc[0]) #...
  • [python]view plaincopy nums=[1,2,3,4] 均值和中位数均可以使用numpy库的方法: [python]view plaincopy importnumpyasnp #均值 np.mean(nums) #中位数 np.median(nums) 众...
  • LeetCode169.python实现: 求众数问题☆

    千次阅读 2019-03-12 14:18:47
    三、python具体实现 四、题外话 一、问题 给定一个大小为n的数组,找到其中的众数众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。 示例1: 输入: [3,...
  • python应用_求众数问题

    千次阅读 2011-11-22 11:55:33
    多重集中重数最大的元素称为众数...就是一个可以有重复元素的集合,在这个集合中重复的次数最多的那个数就叫它的众数... 如S = [1,2,2,2,3,5] 重数是2,其重数为3 上代码: list_num = [] list_num_count = 0 ...
  • leetcode-腾讯精选练习(50 题)python #169 求众数 题目来源:https://leetcode-cn.com/problemset/50/ 给定一个大小为 n 的数组,找到其中的众数众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设...
  • LeetCode刷题日记求众数Python代码 求众数 给定一个大小为 n 的数组,找到其中的众数众数是指在数组中出现次数大于 ⌊ n/2 ⌋的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。 示例 1: 输入: [3,2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,049
精华内容 2,419
关键字:

python列表求众数

python 订阅