我正在寻找 R 的 hist(x, breaks=XXX, plot=FALSE)$count
函数的更快替代方案,因为我不需要生成的任何其他输出(因为我想在 sapply
调用中使用它,需要 100 万次迭代来调用此函数),例如
x = runif(100000000, 2.5, 2.6)
bincounts = hist(x, breaks=seq(0,3,length.out=100), plot=FALSE)$count
有什么想法吗?
最佳答案
第一次尝试使用 table
和 cut
:
table(cut(x, breaks=seq(0,3,length.out=100)))
它避免了额外的输出,但在我的电脑上大约需要 34 秒:
system.time(table(cut(x, breaks=seq(0,3,length.out=100))))
user system elapsed
34.148 0.532 34.696
与
hist
的 3.5 秒相比:system.time(hist(x, breaks=seq(0,3,length.out=100), plot=FALSE)$count)
user system elapsed
3.448 0.156 3.605
使用
tabulate
和 .bincode
运行速度比 hist
快一点:tabulate(.bincode(x, breaks=seq(0,3,length.out=100)), nbins=100)
system.time(tabulate(.bincode(x, breaks=seq(0,3,length.out=100))), nbins=100)
user system elapsed
3.084 0.024 3.107
使用
tablulate
和 findInterval
相对于 table
和 cut
提供了显着的性能提升,并且相对于 hist
有不错的改进:tabulate(findInterval(x, vec=seq(0,3,length.out=100)), nbins=100)
system.time(tabulate(findInterval(x, vec=seq(0,3,length.out=100))), nbins=100)
user system elapsed
2.044 0.012 2.055
关于R - 更快的替代 hist(XX, plot=FALSE)$count,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38437350/