zoukankan      html  css  js  c++  java
  • 画图必备numpy函数

    给定一堆数字,需要统计这些数字中每个数字的个数。
    如果这些数字是整数,那自然可以精确统计出来。
    如果这些数字是浮点数,如果精确统计会发现几乎每个数字都只出现了一次。所以浮点数就要通过区间的方式进行统计。

    一、使用collections.Counter

    from collections import Counter
    
    import numpy as np
    import pylab as plt
    
    a = np.random.randint(0, 10, (100))
    c = Counter(a)
    x = c.keys()
    y = c.values()
    plt.plot(x, y, linewidth=5, label="counter")
    cnt = np.bincount(a)
    plt.plot(range(len(cnt)), cnt, label="numpy")
    plt.legend()
    plt.show()
    

    二、使用np.bincount

    统计整数的出现次数,默认每个整数出现一次就算一次,可以通过weights参数指定每个整数的出现次数。
    函数原型:numpy.bincount(x, weights=None, minlength=0)
    weights表示各个数字的权重,长度和x一致。

    import numpy as np
    
    a = np.array([1, 2, 5, 7, 2])
    print(np.bincount(a)) #[0 1 2 0 0 1 0 1]
    print(np.bincount(a, [0.1, 0.2, 0.5, 0.7, 0.2])) #[0.  0.1 0.4 0.  0.  0.5 0.  0.7]
    

    三、使用np.histogram

    使用若干个区间统计浮点数出现次数。
    values,edges=numpy.histogram(a, bins=10, range=None, normed=False, weights=None, density=None)
    返回的edges和values都是一维数组,edges的长度比values大一个,表示len(values)个间隔。

    • a:一个数组,如果是多维会被当做一维数组
    • bins:如果是一个int,表示把区间[min,max]均分为bins份;如果是一个数组,表示手动指定各个bins
    • range:如果bins是一个int,使用range指定柱状图的区间
    • weights:可以为每个元素设定权重,默认每个元素权重为1
    • normed:已废弃
    • density:bool值

    返回值:
    values就是纵轴,是一个一维数组,表示每个柱子内元素的个数
    edges就是横轴,是一个一维数组,它的长度比values多一维

    四、使用np.interp实现插值

    y=numpy.interp(x, xp, fp, left=None, right=None, period=None)

    • x:一个数组,表示要取哪些地方的插值结果
    • xp、fp:x坐标和y坐标
    • left、right、period:基本用不上,不必知道

    返回值:y插值之后的结果,它的长度和x一样。
    使用此函数可以只绘制一部分坐标而不用全不绘制。matplotlib内部自动会调用插值函数合理绘制图像,无需手动通过numpy调用,但当向前端传递数据让js完成绘制时,就需要手动调用numpy来进行插值。

    实际上,matplotlib这个库在可视化数据时已经为我们做好了这些工作,如插值等,直接用matplotlib是不需要使用以上函数的。有时,需要将绘图数据从后端传到前端用HTML进行展示,这就需要压缩一下数据,只把展示的数据传送过来即可。

  • 相关阅读:
    计算机中的进制和编码
    操作系统简史
    电脑结构和CPU、内存、硬盘三者之间的关系
    电脑简史
    使用开源my-deploy工具实现开发环境的代码自动化部署
    使用Let’s Encrypt创建nginx免费SSL证书
    VM ESXI 服务器虚拟化资料积累
    python mysql连接函数
    python日期格式转换小记
    Python模块学习
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/10634046.html
Copyright © 2011-2022 走看看