python绘制直方图用什么函数_python中直方图的概率密度函数适合另一个histrogram...

这篇博客介绍了如何通过累积密度函数(CDF)从直方图数据生成具有相同分布的新随机数。首先,对数据进行直方图统计,然后使用插值方法scipy.interpolate.interp1d()创建CDF的连续表示。为了处理分布的尾部,可以选择赋予高斯或其他概率分布。代码示例展示了如何实现这一过程,并通过比较生成的随机数与原始直方图验证了分布的一致性。这种方法适用于处理大量数据和复杂分布情况。
摘要由CSDN通过智能技术生成

您可以使用累积密度函数从任意分布生成随机数,如

described here.

使用直方图产生平滑的累积密度函数并非完全无关紧要;你可以使用插值例如scipy.interpolate.interp1d()来表示你的箱子中心之间的值,这对于具有相当大数量的箱子和物品的直方图是可行的.但是,您必须决定概率函数的尾部形式,即对于小于最小bin或大于最大bin的值.你可以给你的分布高斯尾巴,例如根据你的直方图拟合高斯),或者适合你的问题的任何其他形式的尾巴,或者简单地截断分布.

例:

import numpy

import scipy.interpolate

import random

import matplotlib.pyplot as pyplot

# create some normally distributed values and make a histogram

a = numpy.random.normal(size=10000)

counts, bins = numpy.histogram(a, bins=100, density=True)

cum_counts = numpy.cumsum(counts)

bin_widths = (bins[1:] - bins[:-1])

# generate more values with same distribution

x = cum_counts*bin_widths

y = bins[1:]

inverse_density_function = scipy.interpolate.interp1d(x, y)

b = numpy.zeros(10000)

for i in range(len( b )):

u = random.uniform( x[0], x[-1] )

b[i] = inverse_density_function( u )

# plot both

pyplot.hist(a, 100)

pyplot.hist(b, 100)

pyplot.show()

这不会处理尾部,它可以更好地处理bin边缘,但它会让你开始使用直方图来生成具有相同分布的更多值.

附:您还可以尝试拟合由几个值描述的特定已知分布(我认为这是您在问题中提到的),但上述非参数方法更通用.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值