给定一堆数字,需要统计这些数字中每个数字的个数。

如果这些数字是整数,那自然可以精确统计出来。

如果这些数字是浮点数,如果精确统计会发现几乎每个数字都只出现了一次。所以浮点数就要通过区间的方式进行统计。

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

画图必备numpy函数的更多相关文章

  1. Numpy函数库基础

    利用Numpy函数库构造4*4随机数组,然后将数组转化为矩阵,然后矩阵与其逆矩阵相乘,计算机处理的误差 from numpy import * random.rand(4,4) print(rando ...

  2. [转]Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate()

    Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate() 觉得有用的话,欢迎一起讨论相互学习~Follow Me ...

  3. Numpy 函数总结 (不断更新)

    本篇主要收集一些平时见到的 Numpy 函数. numpy.random.seed & numpy.random.RandomState np.random.seed() 和 np.rando ...

  4. numpy函数库中一些经常使用函数的记录

    ##numpy函数库中一些经常使用函数的记录 近期才開始接触python,python中为我们提供了大量的库,不太熟悉.因此在<机器学习实战>的学习中,对遇到的一些函数的使用方法进行记录. ...

  5. numpy函数库中一些常用函数的记录

    ##numpy函数库中一些常用函数的记录 最近才开始接触Python,python中为我们提供了大量的库,不太熟悉,因此在<机器学习实战>的学习中,对遇到的一些函数的用法进行记录. (1) ...

  6. numpy函数笔记(持续更新)

    numpy函数笔记 np.isin用法 np.isin(a,b) 用于判定a中的元素在b中是否出现过,如果出现过返回True,否则返回False,最终结果为一个形状和a一模一样的数组.(注意:这里的a ...

  7. numpy 函数一:linspace

    接触 numpy 遇到的第一个函数可能就是 linspace 函数,但是对于我们这种没有学过 matlab 的人来说,根本不知道这是什么. 所以只能自己查资料. 词典显示: 线性等分向量 线性平分矢量 ...

  8. numpy函数白板

    numpy.linspace(start, stop, num=50, endpoint=True, retstep=False) start 起始位置 stop 终止位置 num 个数 endpoi ...

  9. numpy函数fromfunction分析

    从函数规则创建数组是非常方便的方法.在numpy中我们常用fromfunction函数来实现这个功能. 在numpy的官网有这么一个例子. >>> def f(x,y): ... r ...

随机推荐

  1. mybatis中union可以用if判断连接,但是<select>中第一个select语句不能被if判断,因此可以从dual表中查询null来凑齐。union如果使用order by排序,那么只能放在最后一个查询语句的位置,并且不能带表名。

    <!-- 一址多证纳税人分析表 --> <select id="yzdznsrlistPage" parameterType="page" r ...

  2. Centos7服务器中安装MySQL(选择一个你想要的版本)

    开始,我默认安装了MySQL8,但是在测试的时候发现通过Hibernate连接之前的MySQL5.7的代码运行在连接新版本的库的时候发生异常,出于时间原因没有深度排查 但是我严重怀疑是版本匹配问题,为 ...

  3. 简单总结下opacity、transparent以及rgba

    这几个概念最开始学的时候只是有个大致印象,现在复习这部分的知识点,发现不仔细区分一下,还真有点混乱. 三者共同点是都和透明有关.先分着来说一下: 1.opacity用来设置元素的不透明级别,从 0.0 ...

  4. Vue项目初始

    利用npm搭建Vue项目流程 安装 第一步: 官方下载node 或者pip install node 第二步:可忽略 :  npm install npm@latest -g 更新最新的稳定版本 第三 ...

  5. 在Qt项目中添加全局宏变量来达到按方案编译的目的

    遇到一个需求,需要根据不同需要编译所需程序,本人采用了在QtCreator中建立不同的构建设置,配合宏的方式来实现: 1.在项目-构建设置中,添加构建配置2.在构建步骤里的qmake中的额外参数一栏填 ...

  6. malloc函数详解 C语言逻辑运算符

    今天写线性表的实现,又遇到了很多的难题,C语言的指针真的没学扎实.很多基础都忘了. 一是 :malloc 函数的使用. 二是:C语言逻辑运算符. 一.原型:extern void *malloc(un ...

  7. [ZJOI2013]K大数查询

    Description: 给定一个序列,支持两种操作 1.在[L,R]的每个位置上加上一个数 (注意一个位置上有多个数) 2.查询[L,R]上所有数中的第K大 Hint: \(n,m<=5e4\ ...

  8. BZOJ3565 : [SHOI2014]超能粒子炮

    若$a\leq 1000$,则整个$f$数列会形成$O(a)$段公差为$a$的等差数列. 否则$a^{-1}\leq 1000$,设$ai+b=f(i)$,那么有$i=a^{-1}f(i)-ba^{- ...

  9. VueJs初步学习,一个表格的增删改查

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 2017.07.06【NOIP提高组】模拟赛B组

    Summary 今天比赛感觉题目很奇葩,都可以用许多简单方法来做,正确性都显然,当然也有点水,也就是说是考我们的数感和数学知识,而程序,只是代码的体现. 这次的时间安排感觉不错,因为很快就打完最后一道 ...