R中的快速采样

R中的快速采样,r,R,是否有比base::sample函数更快的随机子样本提取方法(无需替换) 我可以在我的笔记本电脑上用3毫秒的时间获得10000个样品。不需要更换,我可以在5毫秒内得到它们。从500个发行版中多次绘制需要66毫秒。您需要多快的速度?除了使用CUDA/gputools,您不会找到更快的方法。您可以通过取消base::sample函数调用来获得一点速度: > x<- rnorm(10000) > system.time(for(i in 1:100000) x[.Internal(s

是否有比
base::sample
函数更快的随机子样本提取方法(无需替换)


我可以在我的笔记本电脑上用3毫秒的时间获得10000个样品。不需要更换,我可以在5毫秒内得到它们。从500个发行版中多次绘制需要66毫秒。您需要多快的速度?

除了使用CUDA/gputools,您不会找到更快的方法。

您可以通过取消base::sample函数调用来获得一点速度:

> x<- rnorm(10000)
> system.time(for(i in 1:100000) x[.Internal(sample(10000L, 10L, FALSE, NULL))])
   user  system elapsed 
  2.873   0.017   2.851 
> system.time(for(i in 1:100000) sample(x,10))
   user  system elapsed 
  3.420   0.025   3.258 
>x系统时间(对于(1:100000中的i)x[.内部(样本(10000L,10L,FALSE,NULL)))
用户系统运行时间
2.873   0.017   2.851 
>系统时间(对于(1:100000中的i)样品(x,10))
用户系统运行时间
3.420   0.025   3.258 

根据您的问题,可能还有其他更聪明的方法来加速代码。想一想用一个大的来替换许多小的sample调用。

+1表示问题可能是大量的
sample调用。
+1用一个替换许多调用--我需要将235000000个总体划分为每个150000个随机集。起初,我尝试对集合进行单独采样,但这会花费一天的时间,所以我只采样了一次:总体规模扩大到1e8-1e9,您将看到它的规模有多大它在1e9时的规模非常大,因为您遇到了RAM问题。此外,请记住这些答案是9年前的。您应该在我们现在拥有的非常不同的R版本上进行自己的测试。我对1e8-1e9的思考是基于R 4.0.3和R-devel的,它有大量的ram内存