gpt4 book ai didi

performance - R中更快的比例表

转载 作者:行者123 更新时间:2023-12-04 17:54:34 25 4
gpt4 key购买 nike

我正在创建基于 xts 对象的比例表。由于这是一个(不幸的是)需要大约 10^6 个循环的大型程序的一部分,因此它造成了相当大的瓶颈,我想加快速度。

这是我开始的一个例子:

library(quantmod)

test.xts <- xts(sample(seq(1,5, by=.5), 50, replace=T), as.Date(1:50))

system.time(for(i in 1:10000){

prop.table(table(test.xts))

})

>user system elapsed
19.86 0.00 18.58

我已经将 xts 更改为矩阵,这导致速度显着提高。我只提到它最初是一个 xts,以防万一我遗漏了一些 xts 的东西,它会加速超出我已经看到的将其转换为矩阵的 yield 。
test.mat <- as.matrix(test.xts)

system.time(for(i in 1:10000){

prop.table(table(test.mat))

})

>user system elapsed
2.78 0.00 2.90

但我真的希望它尽可能快,所以我希望那里的其他人有进一步改进的建议。我希望有一个明显的方法我忽略了。

另一条信息是这些表的输出最终与不同时间段的类似输出合并,因此维度需要保持命名。 (即,我需要能够将时间 1 的值“10”的比例与时间 2 的“10”的比例匹配)。

任何帮助是极大的赞赏。

最佳答案

table()隐含地创建了一个昂贵的因素。在您的情况下,您可以使用 tabulate() 节省很多(超过 10 倍)因为你已经有了整数:

a <- tabulate(test.mat)
names(a) <- seq_along(a)
a / sum(a)
1 2 3 4 5 6 7 8 9 10
0.16 0.14 0.08 0.14 0.08 0.16 0.02 0.06 0.10 0.06

时间:
system.time(for(i in 1:10000){
a <- tabulate(test.mat)
names(a) <- seq_along(a)
a/sum(a)
})

user system elapsed
0.208 0.002 0.210

您的比较时机:
system.time(for(i in 1:10000) prop.table(table(test.mat)))
user system elapsed
3.373 0.028 3.402

关于performance - R中更快的比例表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10656438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com