比较R和Python的矢量化和优化

2024-04-27 18:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

R语言中,可以通过使用purrr::map()furrr::future_map()函数来实现优化。然而,我不确定优化是如何为^{}方法工作的。实际上,我想了解PythonR在复杂性和性能方面如何扩展到并行处理[1,2]

因此,出现了以下问题:

R语言中的purrr::map()furrr::future_map()函数相比,Python中的^{}优化是如何工作的

通过对purrr/furrr进行一个简单的tictoc测试,我可以观察到,在这两种情况下,矢量化都取得了巨大的成功。尽管如此,我也可以注意到结果似乎表明R语言从根本上说是更快的

Python

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

R

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


Tags: 函数语言maptimenpfuturerandomtic
1条回答
网友
1楼 · 发布于 2024-04-27 18:29:23

我相信numpy将它的一些“原始”对象包装在包装类中,这些包装类本身就是Python(例如thisone)。 当查看R镜像源代码时,我发现一个array类基本上是本机代码(aka C)。 我想,仅仅是那个额外的间接层就可以解释速度上的差异

相关问题 更多 >