如何解决相乘向量和简单地将向量提高到 n 次方之间的执行时间实际上是否存在差异?
例如
x <- seq.int(1,1000,2)
x^4
x * x * x * x
如果是这样,有人可以解释为什么会这样吗?欢迎任何答案,即使只是“阅读有关此内容或查看其他帖子”。
解决方法
好吧,对这两个解决方案进行基准测试表明乘法比乘方更快。
x <- seq.int(1,10000000,2)
microbenchmark::microbenchmark(raise_to = x^4,multiply = x * x * x * x)
#Unit: milliseconds
# expr min lq mean median uq max neval cld
# raise_to 92.78304 110.46660 120.83709 121.54933 125.53588 187.5820 100 b
# multiply 12.71391 24.21508 39.05668 26.50335 32.59123 700.3454 100 a
,
实际上性能取决于x
的长度。看来,如果你有较短的 x
,那么 x^4
会更快,否则 x * x * x * x
将是赢家。
回到为什么?。我猜^
作为幂算符需要处理一般情况,例如x^3.5
或x^complex(1,3.2,4.5)
,而*
只是将所有项相乘,不需要处理对输入参数的任何预处理。
当你运行下面的代码时
for (ub in seq(10,100,10)) {
x <- seq.int(1,ub,2)
cat(sprintf("\nlength of x is %s\n ",length(x)))
print(microbenchmark::microbenchmark(
pow = x^4,multiply = x * x * x * x,unit = "relative"
))
}
你会看到
length of x is 5
Unit: relative
expr min lq mean median uq max neval
pow 1 1.000000 1.000000 1.000000 1.00000 1.0000000 100
multiply 2 1.995025 1.490337 1.985149 1.66113 0.2044481 100
length of x is 10
Unit: relative
expr min lq mean median uq max neval
pow 1.002 1 0.857511 1.164452 1.141839 0.1394461 100
multiply 1.000 1 1.000000 1.000000 1.000000 1.0000000 100
length of x is 15
Unit: relative
expr min lq mean median uq max neval
pow 1.5 1.498753 1.08284 1.334812 1.399202 0.342246 100
multiply 1.0 1.000000 1.00000 1.000000 1.000000 1.000000 100
length of x is 20
Unit: relative
expr min lq mean median uq max neval
pow 1.6 1.794821 1.563364 1.499168 1.665557 0.6875976 100
multiply 1.0 1.000000 1.000000 1.000000 1.000000 1.0000000 100
length of x is 25
Unit: relative
expr min lq mean median uq max neval
pow 2.5 2.197605 1.999897 2.197605 1.998336 0.8122462 100
multiply 1.0 1.000000 1.000000 1.000000 1.000000 1.0000000 100
length of x is 30
Unit: relative
expr min lq mean median uq max neval
pow 2.987562 2.596806 2.354313 2.329451 2.327243 5.842429 100
multiply 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 100
length of x is 35
Unit: relative
expr min lq mean median uq max neval
pow 2.802 2.99004 2.622254 2.663894 2.460829 5.912573 100
multiply 1.000 1.00000 1.000000 1.000000 1.000000 1.000000 100
length of x is 40
Unit: relative
expr min lq mean median uq max neval
pow 3.4 3.39521 2.683118 2.996672 2.574286 0.7391871 100
multiply 1.0 1.00000 1.000000 1.000000 1.000000 1.0000000 100
length of x is 45
Unit: relative
expr min lq mean median uq max neval
pow 3.604 3.168333 3.088436 3.329451 2.92582 3.568409 100
multiply 1.000 1.000000 1.000000 1.000000 1.00000 1.000000 100
length of x is 50
Unit: relative
expr min lq mean median uq max neval
pow 4.002 3.501667 3.314933 3.66223 3.277778 6.634094 100
multiply 1.000 1.000000 1.000000 1.00000 1.000000 1.000000 100
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。