如何加速这些R计算?

时间:2017-06-29 02:39:02

标签: php r algorithm performance optimization

我必须使用X,Y和Z坐标数据框。我想找到两个数据帧中所有点之间的距离。 (类似于条目A1与B,A2中的每个条目和B中的每个条目之间的距离,依此类推,反之亦然)。我基本上这样做了:

1。)写了一个计算两点之间距离的函数。 2.)使用distanceFinder函数创建一个函数,该函数查找组中一个点与相对组中每个其他点之间的距离。 3.)创建了一个名为bigDistance()的函数,该函数在一个组中的每个条目上调用filter(),并通过for循环将结果附加到空数据框,直到它完成。

此代码在我正在试验的文件上运行大约需要2分钟,我发现我必须将此算法转换为PHP ...所以我想这是一个优化问题,因为我觉得PHP在制作这些计算时会比R慢吗?很抱歉,如果人们发现这个"偏离主题"但是,是编程和Big O符号和东西的新手,所以任何提示都会很棒!谢谢!

1 个答案:

答案 0 :(得分:2)

dist功能完全符合您的要求。

myDf <- data.frame(
  x = rnorm(8),
  y = rnorm(8),
  z = rnorm(8)
)

dist(myDf)
#           1         2         3         4         5         6         7
# 2 3.0457054                                                            
# 3 1.7260658 3.2107845                                                  
# 4 1.2839101 3.4596211 2.9451175                                        
# 5 1.5656231 4.0154389 2.3421445 2.3612348                              
# 6 1.9294650 1.6655718 1.7977887 2.8726174 2.5815296                    
# 7 2.1842743 3.5274692 3.8552701 1.0984651 2.9951244 3.3220919          
# 8 1.4795857 3.5364663 0.5567753 2.7033371 1.9226225 2.0631788 3.6624082

它看起来也很快(平均73毫秒)

library(microbenchmark)
mb <- microbenchmark(dist(myDf))
mb
# Unit: microseconds
#       expr    min     lq    mean median     uq     max neval
# dist(myDf) 70.436 71.453 77.4083 72.978 82.133 172.911   100

autoplot(mb)

enter image description here