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进行展示,这就需要压缩一下数据,只把展示的数据传送过来即可。

  • 相关阅读:
    图片的存储
    【已解决】如图,说我磁盘不够,看到var目录下有的个隐藏文件夹占了46G,不知道怎么删除
    Java 中时间处理SimpleDateFormat 中HH和hh的区别
    api的日志
    网页报警提示 This page includes a password or credit card input in a non-secure context. A warning has been added to the URL bar. For more information, see https://goo.gl/zmWq3m.
    Springboot项目中的favicon
    页面Header自适应屏幕
    Vue 日期下拉框
    VUE 单选下拉框Select中动态加载 默认选中第一个
    Vue 循环 [Vue warn]: Avoid using non-primitive value as key
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/10634046.html
Copyright © 2011-2022 走看看