http://statistics.ats.ucla.edu/stat/r/library/bootstrap.htm
搜索我发现:
http://mjtokelly.blogspot.com/2006/04/bootstrap-statistics-in-python.html(代码的链接被破坏)
http://adorio-research.org/wordpress/?p=9048
https://github.com/cgevans/scikits-bootstrap
但是上面的这些似乎并没有提供所有功能(特别是概率权重).
有什么指针吗?
这最近被添加到numpy.random
谢谢
最佳答案
如果您只是在寻找R的示例函数的python版本,请尝试以下方法:
import collections
import random
import bisect
def sample(xs,sample_size = None,replace=False,sample_probabilities = None):
"""Mimics the functionality of http://statistics.ats.ucla.edu/stat/r/library/bootstrap.htm sample()"""
if not isinstance(xs,collections.Iterable):
xs = range(xs)
if not sample_size:
sample_size = len(xs)
if not sample_probabilities:
if replace:
return [random.choice(xs) for _ in range(sample_size)]
else:
return random.sample(xs,sample_size)
else:
if replace:
total,cdf = 0,[]
for x,p in zip(xs,sample_probabilities):
total += p
cdf.append(total)
return [ xs[ bisect.bisect(cdf,random.uniform(0,total)) ]
for _ in range(sample_size) ]
else:
assert len(sample_probabilities) == len(xs)
xps = list(zip(xs,sample_probabilities))
total = sum(sample_probabilities)
result = []
for _ in range(sample_size):
# choose an item based on weights,and remove it from future iterations.
# this is slow (N^2),a tree structure for xps would be better (NlogN)
target = random.uniform(0,total)
current_total = 0
for index,(x,p) in enumerate(xps):
current_total += p
if current_total > target:
xps.pop(index)
result.append(x)
total -= p
break
return result
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。