比较 R 和 Python 矢量化和优化
Comparing R and Python Vectorization and Optimization
在R语言中,可以使用purrr::map()
或furrr::future_map()
函数进行优化。但是,我不确定 np.array()
方法的优化是如何工作的。事实上,我想了解 Python 和 R 如何在复杂性方面扩展到并行处理 [1, 2]和性能。
因此,出现以下问题:
与 Python 中的 np.array()
函数相比,purrr::map()
和 furrr::future_map()
函数的优化效果如何? 56=]R语言?
通过对 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 秒过去了
For 循环: 0.065 秒过去了
参考资料
[1] Ross Ihaka 和 Robert Gentleman (1996) R:数据分析和图形语言,计算和图形统计杂志,5:3,299-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 月,doi:10.1109/MCSE.2011.37
在R语言中,可以使用purrr::map()
或furrr::future_map()
函数进行优化。但是,我不确定 np.array()
方法的优化是如何工作的。事实上,我想了解 Python 和 R 如何在复杂性方面扩展到并行处理 [1, 2]和性能。
因此,出现以下问题:
与 Python 中的 np.array()
函数相比,purrr::map()
和 furrr::future_map()
函数的优化效果如何? 56=]R语言?
通过对 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 秒过去了
For 循环: 0.065 秒过去了
参考资料
[1] Ross Ihaka 和 Robert Gentleman (1996) R:数据分析和图形语言,计算和图形统计杂志,5:3,299-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 月,doi:10.1109/MCSE.2011.37