python怎么做直方图_Python:如何制作具有相同*大小* bins的直方图

我有一组数据,并且想要制作一个直方图。我需要箱子具有相同的大小,我的意思是它们必须包含相同数量的对象,而不是具有等间距箱子的更常见(numpy.histogram)问题。

这自然会产生垃圾箱宽度的花费,而且一般情况下会不同。

我将指定想要的箱子数量和数据集合,获得箱子边缘的回报。

Example:

data = numpy.array([1., 1.2, 1.3, 2.0, 2.1, 2.12])

bins_edges = somefunc(data, nbins=3)

print(bins_edges)

>> [1.,1.3,2.1,2.12]所以箱子都包含2点,但它们的宽度(0.3,0.8,0.02)是不同的。

有两个限制:

- 如果一组数据相同,则包含它们的箱子可能会更大。

- 如果有N个数据和M个数据块请求,如果N%M不是0,则会有N / M个数据块加上一个数据。

这段代码是我编写的一些代码,对于小数据集很适合。如果我有10 ** 9+分并想加快这个过程呢?

1 import numpy as np

2

3 def def_equbin(in_distr, binsize=None, bin_num=None):

4

5 try:

6

7 distr_size = len(in_distr)

8

9 bin_size = distr_size / bin_num

10 odd_bin_size = distr_size % bin_num

11

12 args = in_distr.argsort()

13

14 hist = np.zeros((bin_num, bin_size))

15

16 for i in range(bin_num):

17 hist[i, :] = in_distr[args[i * bin_size: (i + 1) * bin_size]]

18

19 if odd_bin_size == 0:

20 odd_bin = None

21 bins_limits = np.arange(bin_num) * bin_size

22 bins_limits = args[bins_limits]

23 bins_limits = np.concatenate((in_distr[bins_limits],

24 [in_distr[args[-1]]]))

25 else:

26 odd_bin = in_distr[args[bin_num * bin_size:]]

27 bins_limits = np.arange(bin_num + 1) * bin_size

28 bins_limits = args[bins_limits]

29 bins_limits = in_distr[bins_limits]

30 bins_limits = np.concatenate((bins_limits, [in_distr[args[-1]]]))

31

32 return (hist, odd_bin, bins_limits)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值