gpt4 book ai didi

performance - 向量子集的最有效方法

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

我需要计算向量子集的均值和方差。令x为向量,y为观察值是否在子集中的指示符。哪个更有效:

sub.mean <- mean(x[y])
sub.var <- var(x[y])

或者
sub      <- x[y]
sub.mean <- mean(sub)
sub.var <- var(sub)
sub <- NULL

第一种方法不是显式创建新对象。但是对 meanvar的调用会隐式执行此操作吗?还是在存储的原始向量上工作?

第二秒是否更快,因为它不必进行两次子集设置?

我关心大型数据集的速度和内存管理。

最佳答案

在长度为10M的向量上进行基准测试表明(在我的机器上)后一种方法更快:

f1 = function(x, y) {
sub.mean <- mean(x[y])
sub.var <- var(x[y])
}

f2 = function(x, y) {
sub <- x[y]
sub.mean <- mean(sub)
sub.var <- var(sub)
sub <- NULL
}

x = rnorm(10000000)
y = rbinom(10000000, 1, .5)

print(system.time(f1(x, y)))
# user system elapsed
# 0.403 0.037 0.440
print(system.time(f2(x, y)))
# user system elapsed
# 0.233 0.002 0.235

这不足为奇- mean(x[y])确实必须创建一个新对象以使 mean函数起作用,即使它没有将其添加到本地 namespace 中也是如此。因此, f1由于必须两次进行子设置(如您所推测的那样)而速度较慢。

关于performance - 向量子集的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15093606/

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