![]() |
1
9
通常,对于此类问题,可以使用Rcpp包将函数一对一转换为C++。这应该会大大加快速度。 首先,R版本:
现在是C++版本:
为了完整性,我们还考虑一下所提出的矢量化版本:
我们看到,对于相同的随机种子,它给出了相同的结果,因此它似乎是一个可行的竞争者。 在基准测试中,C++版本和矢量化版本的性能类似,矢量化版本显示出略高于C++版本的优势:
然而,矢量化版本在速度与内存和 will blow up your memory for long loops. C++版本几乎不使用内存。 对于10^9个步骤,C++版本在我的机器上运行大约需要2分钟(110秒)。我没有尝试R版本。根据较短的基准,可能需要7个小时左右。
|
![]() |
2
4
这应该快得多,但任何事情都可能需要一段时间。用较小的长度值(如10^6)来测试这一点可能会更好。
编辑根据@user3666197的评论,我对此进行了测试,他是正确的。 此解决方案适用于较小的数字,但一旦步骤数过大,它就会失败。 我用OP的代码测试了我的“矢量化”版本。当随机游走的长度为10^8时,我的代码用了大约7秒,OP的代码用了131秒(在我的笔记本电脑上)。然而,当我将长度增加到10^9时(根据最初的问题),我的版本导致了大量磁盘交换,我不得不终止该进程。此解决方案在OP要求的规模下失败。 |
![]() |
3
3
一种解决方案是使用@G5W提出的矢量化方法,但将其分解为更小的块以避免任何内存溢出问题。这为您提供了矢量化解决方案的速度,但通过管理块大小,您可以控制进程使用的内存量。 下面将问题分解为1e+07块,循环100次,总共得到1e+09块。 在第一个块的末尾,记录低于0的时间百分比和终点。然后将结束点输入到下一个块,并记录0以下的时间百分比和新的结束点。
最后,平均100次跑步,使总时间低于零。呼叫
|
![]() |
4
0
如果随机性源在技术上被构造为其他确定性硬件的一种能力,以满足生成流的重复性要求以及通过某种伪随机生成器算法实现“生成”随机性的所有条件,那么这种随机性源不容易从纯-
也就是说,PRG步骤是任何试图重新定义纯-
这不会改变(非)负的百分比
展开“慢速”循环或准-( 因为这些值仍然是连续相关的 )-矢量化过程(R语言实现的特点是利用但几乎是硬件CPU指令集级别的技巧,因此不是语言游戏规则的改变者,而是绕过一些故意缓慢的代码执行构造函数)是最可能发生的。 |
![]() |
5
0
使用向量通常会产生比循环更好的性能。对于非常大的数字(即10^9),这里的问题是内存限制。由于您只对负指数的最终百分比感兴趣,因此以下内容将起作用(在10^9步骤中需要几分钟)。
|
|
Marc B. · 使用ggplot2创建条形图时“缺少值” 1 年前 |
|
Mallikarjun M · 如何使用随机森林进行时间序列预测? 1 年前 |
|
ly li · 模型摘要:当表格形状改变时,拟合优度消失 1 年前 |
![]() |
RoyBatty · 统计每个字符在整个数据集中出现的次数 2 年前 |
![]() |
stats_noob · R: 记录某个“行为”发生的循环的索引? 2 年前 |