用python,numpy求平均数,众数,中位数,k百分位数

3 篇文章 0 订阅
2 篇文章 0 订阅

用python求一下平均数,众数,中位数,k百分位数

0.首先设置一下数据

import numpy as np
# 一个 取值0-10 大小为20 的整数数组
a = np.random.randint(0,10,size=(20))

1. 平均数

自己写的:

# 求平均数
def pingjun(a):
    return sum(a)/len(a)

自带的方法:

np.mean(a)
a.mean()

2. 中位数

自己写的:

# 求中位数
def zhongwei(a):
    b = sorted(a) # 排序
    print(b)
    if len(a)%2==1:
        return b[int(len(a)/2)] # 向下取整
    else:
        return (b[int(len(a)/2)]+b[int(len(a)/2)-1])/2

自带的方法:

np.median(a)
a.median()

3.众数

自己写的:

# 求众数
# 这里我们就用字典来计算出现次数,也可以直接用set()去除重复元素直接作为字典的数值
def zhongshu(a):
    x = {}
    for i in a:
        if i in x:
            x[i] = x[i] + 1
        else:
            x[i] = 1
    b = 0
    key2 = 0
    for key, value in x.items(): # 遍历字典
        if value > b:
            b = value
            key2 = key
    return key2

自带的方法:

# np.bincount(a),返回相对应坐标的出现次数
np.argmax(np.bincount(a))

4. k百分位数

自己写的:

def Kbaifen(a,k):
    Nk = a.shape[0]
    indices = 1 + (Nk - 1)*k/100.0 # 位置
    a = sorted(a) # 排序
    return a[int(indices)-1]+(indices - int(indices))*(a[int(indices)]-a[int(indices)-1])

自带的方法:

np.percentile(X,k,interpolation='linear') # 直接返回数值

5. 整体代码

import numpy as np

# 求平均值
def pingjun(a):
    return sum(a)/len(a)

# 求中位数
def zhongwei(a):
    b = sorted(a) # 排序
    print(b)
    if len(a)%2==1:
        return b[int(len(a)/2)] # 向下取整
    else:
        return (b[int(len(a)/2)]+b[int(len(a)/2)-1])/2

# 求众数(可能有多个,这里随机返回一个)
# 这里我们就用字典来计算出现次数,也可以直接用set()去除重复元素直接作为字典的数值
def zhongshu(a):
    x = {}
    for i in a:
        if i in x:
            x[i] = x[i] + 1
        else:
            x[i] = 1
    b = 0
    key2 = 0
    for key, value in x.items(): # 遍历字典
        if value > b:
            b = value
            key2 = key
    return key2

# 求k百分位数
def Kbaifen(a,k):
    Nk = a.shape[0]
    indices = 1 + (Nk - 1)*k/100.0 # 位置
    a = sorted(a)
    return a[int(indices)-1]+(indices - int(indices))*(a[int(indices)]-a[int(indices)-1])

a = np.random.randint(0,10,size=(20))
print(a)
print("平均数==================")
print(pingjun(a))
print(a.mean())  # 自带方法
print(np.mean(a))
print("中位数==================")
print(zhongwei(a))
print(np.median(a)) # 自带方法
print("众数===================")
print(zhongshu(a))
print(np.argmax(np.bincount(a))) # np.bincount(a),返回相对应坐标的出现次数
print("k百分位数===============")
print(Kbaifen(a,25))
print(np.percentile(a,25,interpolation='linear')) # 自带方法

结果:

[2 9 2 6 2 0 3 5 1 4 6 3 0 7 4 0 3 6 5 8]
平均数==================
3.8
3.8
3.8
中位数==================
[0, 0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 8, 9]
3.5
3.5
众数===================
2
0
k百分位数===============
2.0
2.0

请多多关注我!!!谢谢!!!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值