zoukankan      html  css  js  c++  java
  • Python科学计算:用NumPy快速处理数据

    创建数组

    import numpy as np
    
    a=np.array([1,2,3])
    b=np.array([[1,2,3],[4,5,6],[7,8,9]])
    b[1,1]=10
    print(a.shape)
    print(b.shape)
    print(a.dtype)
    print(b)
    

    结构数组

    import numpy as np
    
    persontype=np.dtype({
        "names":["name","age","chinese","math","english"],
        "formats":["S32","i","i","i","f"]
    })
    
    peoples=np.array([("ZhangFei",32,75,100,90),
    ("GuanYu",24,85,96,88.5),("ZhaoYun",28,85,92,96.5),
    ("HuangZhong",29,65,85,100)],dtype=persontype)
    
    ages=peoples[:]["age"]
    chineses = peoples[:]['chinese']
    maths = peoples[:]['math']
    englishs = peoples[:]['english']
    print(np.mean(ages))
    print(np.mean(chineses))
    print(np.mean(maths))
    print(np.mean(englishs))
    

    连续数组的创建

    import numpy as np
    
    x1=np.arange(1,11,2) #初始值、终值、步长
    x2=np.linspace(1,9,5)  #初始值、终值、元素个数
    print(x1)
    print(x2)
    

    排序

    import numpy as np
    
    '''
    sort(a, axis=-1, kind=‘quicksort’, order=None),默认情况下使 用的是快速排序;在 kind 里,可以指定 quicksort、mergesort、heapsort 分别表示快 速排序、合并排序、堆排序。
    同样 axis 默认是 -1,即沿着数组的最后一个轴进行排序, 也可以取不同的 axis 轴,或者 axis=None 代表采用扁平化的方式作为一个向量进行排 序。
    另外 order 字段,对于结构化的数组可以指定按照某个字段进行排序
    '''
    a=np.array([[4,3,2],[2,4,1]])
    print(np.sort(a))
    # print(np.sort(a,axis=None))
    # print(np.sort(a,axis=0))
    print(np.sort(a,axis=1))
    

    算术运算

    import numpy as np
    
    x1=np.arange(1,11,2)
    x2=np.linspace(1,9,5)
    
    print(x1,x2)
    
    print(np.add(x1,x2)) #加
    print(np.subtract(x1,x2)) #减
    print(np.multiply(x1,x2)) #乘
    print(np.divide(x1,x2)) #除
    print(np.power(x1,x2)) #求n次方
    print(np.remainder(x1,x2)) #求余数
    

    统计函数

    import numpy as np
    
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    
    #计数组 / 矩阵中的最大值函数 amax(),最小值函数 amin()
    print(np.amin(a))
    print(np.amin(a,0))
    print(np.amin(a,1))
    
    print(np.amax(a))
    print(np.amax(a,0))
    print(np.amax(a,1))
    
    
    #统计最大值与最小值之差 ptp()
    print(np.ptp(a)) #统计数组中最大值与最小值的差,即 9-1=8
    print(np.ptp(a,0)) #沿着 axis=0 轴的最大值与最小值之差,即 7-1=6(当然 8-2=6,9- 3=6,第三行减去第一行的 ptp 差均为 6)
    print(np.ptp(a,1)) #沿着 axis=1 轴的最大值 与最小值之差,即 3-1=2(当然 6-4=2, 9-7=2,即第三列与第一列的 ptp 差均为 2)
    
    
    #统计数组的百分位数 percentile()
    '''
    percentile() 代表着第 p 个百分位数,这里 p 的取值范围是 0-100,如果 p=0, 那么就是求最小值,如果 p=50 就是求平均值,如果 p=100 就是求最大值。同样你也可 以求得在 axis=0 和 axis=1 两个轴上的 p% 的百分位数
    '''
    print(np.percentile(a,50))
    print(np.percentile(a,50,axis=0))
    print(np.percentile(a,50,axis=1))
    
    
    # 统计数组中的中位数 median()、平均数 mean()
    
    # 求中位数
    print(np.median(a))
    print(np.median(a,axis=0))
    print(np.median(a,axis=1))
    
    # 求平均数
    print(np.mean(a))
    print(np.mean(a,axis=0))
    print(np.mean(a,axis=1))
    
    
    #统计数组中的加权平均值 average()
    a=np.array([1,2,3,4])
    wts=np.array([1,2,3,4])
    print(np.average(a))
    print(np.average(a,weights=wts))
    
    
    #统计数组中的标准差 std()、方差 var()
    a=np.array([1,2,3,4])
    print(type(a))
    print(np.std(a))
    print(np.var(a))
    

    练习题:统计全班成绩

    import numpy as np
    
    persontype=np.dtype({
        "names":["name","chineses","englishs","maths"],
        "formats":["U10","i","i","i"]
    })
    
    peoples=np.array([
        ("张飞",66,65,30),
        ("关羽",95,85,98),
        ("赵云",93,92,96),
        ("黄忠",90,88,77),
        ("典韦",80,90,90)
        ],dtype=persontype)
    
    # print(peoples)
    
    '''
    平均成绩、最小成绩、最大成绩、方差、标准差。
    然后把这些人的总成绩 排序,得出名次进行成绩输出
    '''
    name=peoples[:]["name"]
    chineses = peoples[:]['chineses']
    englishs = peoples[:]['englishs']
    maths = peoples[:]['maths']
    
    #平均数
    print("语文平均分: ",np.mean(chineses))
    print("数学平均分: ",np.mean(maths))
    print("英语平均分: ",np.mean(englishs))
    
    #最小成绩
    print("语文最小成绩: ",np.min(chineses))
    print("英语最小成绩: ",np.min(englishs))
    print("数学最小成绩: ",np.min(maths))
    
    
    #最大成绩
    print("语文最大成绩: ",np.max(chineses))
    print("英语最大成绩: ",np.max(englishs))
    print("数学最大成绩: ",np.max(maths))
    
    #标准差
    print("语文标准差: ",np.std(chineses))
    print("英语标准差: ",np.std(englishs))
    print("数学标准差: ",np.std(maths))
    
    #方差
    print("语文方差: ",np.var(chineses))
    print("英语方差: ",np.var(englishs))
    print("数学方差: ",np.var(maths))
    
    #总成绩
    print(peoples[:][:1])
    print(np.sort())
    peoples[:]['总成绩']=chineses+englishs+maths
    print(peoples)
    
    #总成绩进行排序
    # total=peoples[:]['chineses']+peoples[:]['englishs']+peoples[:]['maths']
    
  • 相关阅读:
    LeetCode:Multiply Strings
    c/c++ 输入输出缓冲区
    Scala access modifiers and qualifiers in detail
    PUT vs POST in REST
    Redis优化总结
    硬中断和软中断(转)
    Redis监控技巧(转)
    Understanding mysql max_connect_errors
    TCP : two different sockets sharing a port?
    libevent 安装异常
  • 原文地址:https://www.cnblogs.com/hankleo/p/11703670.html
Copyright © 2011-2022 走看看