python - 整数序列的高效块引导
问题描述
我正在尝试阻止用于蒙特卡洛模拟的引导样本,并且需要在 Python 中生成包含块的大量索引值(整数)。我需要它非常快,但无法弄清楚如何对其进行矢量化。
我想生成大量路径,其中每条路径都包含一个长度为 L 的整数序列。假设我有一个从 0 到 N 的整数数组(表示索引),我将从中随机采样以构造每条路径。当我采样时,我选择一个从 0 到 N 的随机整数 i,然后为某个窗口 w 填充 i,i+1,i+2..,i+w 的路径。然后我选择另一个随机起始索引值并继续使用新窗口填充路径,重复直到路径完全填充。我对所有路径都这样做。
我想知道是否有一种方法可以加快这种方法的速度,而不必遍历每条路径,因为我打算生成大量路径(数百万)
我的 for 循环方法的示例如下:
paths = 10000
path_length = 500
window_length = 5
index = np.arange(0,5000)
simulated_values = np.zeros([paths,path_length])
n_windows = int(np.ceil(path_length/window_length))
for i in range(0, paths):
temp=[]
for n in range(0, n_windows):
random_start = random.randint(0, len(index) - path_length)
temp.extend(range(random_start, random_start + window_length))
simulated_values[i,:] = temp
print(simulated_values)
解决方案
我在一个名为 recombinator 的 python 包中找到了一个解决方案。似乎足够快,并且支持 GPU 以提高速度
https://pypi.org/project/recombinator/
from recombinator.block_bootstrap import circular_block_bootstrap
index = np.arange(0,5000)
path_length = 500
window_length = 5
temp = circular_block_bootstrap(index,block_length=window_length,replications=1000000,replace=True, sub_sample_length=path_length)
推荐阅读
- labview - 我需要帮助更改连接到伺服电机的 LabVIEW 读取 VI 的数据采集速率
- list - Flutter 可以创建 AnimationController 列表吗?
- excel - 获取范围内最后一个非空单元格的列号(如果值不唯一)
- javascript - Next.js/React - 如何从 Apollo 客户端 HOC 普遍解析用户语言?
- security - 如何为您不信任的特定 vscode 扩展禁用 Internet 访问
- visual-studio-code - VSCode Rest客户端 - 如何将变量设置为变量
- xpages - XPages 百分比字段
- c - 代码从 C 中的文本文件中读取几行
- google-api - Google Drive API 分段上传导致文件损坏
- php - 为什么提交后输入数据没有发送到控制器?[LARAVEL]