在R语言中,可以通过使用purrr::map()
或furrr::future_map()
函数来实现优化。然而,我不确定优化是如何为^{
因此,出现了以下问题:
与R语言中的purrr::map()
和furrr::future_map()
函数相比,Python中的^{
通过对purrr
/furrr
进行一个简单的tictoc
测试,我可以观察到,在这两种情况下,矢量化都取得了巨大的成功。尽管如此,我也可以注意到结果似乎表明R语言从根本上说是更快的
import time
a = np.random.rand(1000000)
b = np.random.rand(1000000)
tic = time.time()
c = np.dot(a,b)
toc = time.time()
print ("Vectorized version:" + str(1000*(toc-tic)) +"ms")
c = 0
tic = time.time()
for i in range(1000000):
c += a[i]*b[i]
toc = time.time()
print("For loop:" + str(1000*(toc-tic)) +"ms")
矢量化版本:54.151296615600586ms
对于循环:676.0082244873047ms
a <- runif(1000000,0,1)
b <- runif(1000000,0,1)
c = 0
tictoc::tic()
c = sum(a * b)
tictoc::toc()
c = 0
tictoc::tic()
for (i in 1:length(a)) {
c = a[i]*b[i] + c
}
tictoc::toc()
矢量化版本:0.013秒
对于循环:0.065秒
[1]Ross Ihaka&;Robert Gentler(1996)R:数据分析和图形语言,计算和图形统计杂志,5:3299-314,DOI:10.1080/10618600.1996.10474713
[2]S.van der Walt、S.C.Colbert和G.Varoquaux,“NumPy阵列:高效数值计算的结构”,摘自《科学与技术计算》;《工程》,第13卷,第2期,第22-30页,2011年3月至4月,内政部:10.1109/MCSE.2011.37
我相信numpy将它的一些“原始”对象包装在包装类中,这些包装类本身就是Python(例如thisone)。 当查看R镜像源代码时,我发现一个array类基本上是本机代码(aka C)。 我想,仅仅是那个额外的间接层就可以解释速度上的差异
相关问题 更多 >
编程相关推荐