对数值列表均值进行Bootstrap抽样的最高效实现方法是什么
你可以直接使用Numpy原生向量化操作实现需求,完全不需要依赖高版本Scipy,性能和可读性都远高于你现在的写法:
优化后实现代码
import numpy as np def bootstrap_mean(data, n_bootstrap=100): sample_count = len(data) # 直接生成指定形状的有放回抽样索引 boot_indexes = np.random.randint(0, sample_count, size=(n_bootstrap, sample_count)) # 向量化索引取值后逐行求均值 return data[boot_indexes].mean(axis=1) # 测试示例 data = np.linspace(0, 4, 5) output = bootstrap_mean(data, n_bootstrap=100)
优势说明
- 完全规避了原写法中Python层面的列表推导循环,所有运算都在Numpy层面完成,数据量越大性能提升越明显
- 代码逻辑清晰简洁,符合Pythonic的编码规范
- 仅依赖Numpy,不需要升级Scipy版本
如果需要进一步提升性能,且环境允许安装第三方包,可以给函数添加numba.njit装饰器,对于超大规模数据的重采样运算速度会有额外提升。
内容的提问来源于stack exchange,提问作者cssstudent
相关产品推荐
相关产品推荐

