python – 如何为给定的概率分布生成直方图(用于功能测试服务器)?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何为给定的概率分布生成直方图(用于功能测试服务器)?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1568字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试使用实际的请求频率分布来自动化服务器的功能测试. (有点负载测试,有点模拟)
我已经选择了Weibull发行版,因为它“有点”与我观察到的发行相匹配(快速上升,快速下降但不是立即下降)
我使用此分布来生成应在给定的开始日期和结束日期之间每天发送的请求数
我已经将Python中的一种算法混合在一起,但它感觉很糟糕:
how_many_days = (end_date - start_date).days
freqs = defaultdict(int)
for x in xrange(how_many_responses):
freqs[int(how_many_days * weibullvariate(0.5, 2))] += 1
timeline = []
day = start_date
for i,freq in sorted(freqs.iteritems()):
timeline.append((day, freq))
day += timedelta(days=1)
return timeline
有什么更好的方法可以做到这一点?
解决方法:
这很快,可能不那么准确,但如果你自己计算PDF,那么至少你可以更容易在一个时间轴上放置几个较小/较大的. dev是高斯噪声中的标准偏差,它控制粗糙度.请注意,这不是生成所需内容的“正确”方法,但它很容易.
import math
from datetime import datetime, timedelta, date
from random import gauss
how_many_responses = 1000
start_date = date(2008, 5, 1)
end_date = date(2008, 6, 1)
num_days = (end_date - start_date).days + 1
timeline = [start_date + timedelta(i) for i in xrange(num_days)]
def weibull(x, k, l):
return (k / l) * (x / l)**(k-1) * math.e**(-(x/l)**k)
dev = 0.1
samples = [i * 1.25/(num_days-1) for i in range(num_days)]
probs = [weibull(i, 2, 0.5) for i in samples]
noise = [gauss(0, dev) for i in samples]
simdata = [max(0., e + n) for (e, n) in zip(probs, noise)]
events = [int(p * (how_many_responses / sum(probs))) for p in simdata]
histogram = zip(timeline, events)
print '\n'.join((d.strftime('%Y-%m-%d ') + "*" * c) for d,c in histogram)
内容总结
以上是互联网集市为您收集整理的python – 如何为给定的概率分布生成直方图(用于功能测试服务器)?全部内容,希望文章能够帮你解决python – 如何为给定的概率分布生成直方图(用于功能测试服务器)?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。