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

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

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

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

最新文章

  1. 关闭编辑easyui datagrid table
  2. Codeforces 586D. Phillip and Trains 搜索
  3. 【BZOJ1060】[ZJOI2007]时态同步 树形DP
  4. 用file上传文件时,浏览器返回值总是自动添加<pre>的解决办法
  5. Win2008或IIS7的文件上传大小限制解决方案
  6. [Sharepoint]备份 迁移 还原
  7. android 进程(复习)
  8. 【Netty】第一个Netty应用
  9. hive 存储,解析,处理json数据
  10. 一文搞定MySQL的事务和隔离级别
  11. 快速使用CSS Grid布局,实现响应式设计
  12. 遍历系统中所有的进程,可根据名字或ID查找某一个线程
  13. git clean(转载)
  14. linux统计文件夹大小
  15. eclipse 支持 Robot framework 编辑环境
  16. Android Timer的应用示例
  17. 步步为营_Android开发课[3]_Activity学习
  18. SDRAM基础
  19. yii2 中where条件查询
  20. JPA 使用报Named query not found错误

热门文章

  1. Python json 读取 json 文件并转为 dict
  2. HDU 3861 The King’s Problem (强连通缩点+DAG最小路径覆盖)
  3. HDU 4370 0 or 1 (01规划)【Dijkstra】||【spfa】
  4. Django之Form组件(一)
  5. JAVA-getComponent()与getSource()
  6. Linux 默认目录
  7. 【Excel】SUMIF 或用 筛选器 实现挑选含有某些字段的值,然后把这些值所对应的后面某列上的值相加
  8. 块级元素或者行内元素在设置float属性之后是否改变元素的性质?
  9. curl get请求添加header头信息
  10. 潭州课堂25班:Ph201805201 django 项目 第三十一课 在线课堂视频点播的实现(课堂笔记)