首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让循环和空间计算变得更快?

让循环和空间计算变得更快?
EN

Stack Overflow用户
提问于 2016-11-26 10:08:08
回答 1查看 45关注 0票数 0

我正在使用一个大的数据集(大约15M行x 21列)。其包括事务的长的、最新的信息。我正在计算这个事务到几个目标位置的距离,并将其作为新列附加到主数据集:

代码语言:javascript
复制
TargetLocation1<-data.frame(Long=XX.XXX,Lat=XX.XXX, Name="TargetLocation1", Size=ZZZZ)
TargetLocation2<-data.frame(Long=XX.XXX,Lat=XX.XXX, Name="TargetLocation2", Size=YYYY)

## MainData[6:7] are long and lat columns

MainData$DistanceFromTarget1<-distVincentyEllipsoid(MainData[6:7], TargetLocation1[1:2]) 
MainData$DistanceFromTarget2<-distVincentyEllipsoid(MainData[6:7], TargetLocation2[1:2]) 

我正在使用geosphere()包的distVincentyEllipsoid函数来计算距离。正如你可以想象的那样,distVincentyEllipsoid函数是一个计算密集型的函数,但它更精确(与相同软件包distHaversine(); distMeeus(); distRhumb(); distVincentySphere()的其他函数相比)

Q1)我有16 GB内存和i7 6600U 2.81Ghz英特尔处理器,而且我有多个目标位置,我大约需要5-10分钟来计算每个目标位置的距离。有没有更快的方法来做这件事?

Q2),然后我将为分类变量创建一个新列,以标记属于目标位置的市场定义的每个交易。一个带有2个if语句的for循环。有没有其他方法可以让计算速度更快?

代码语言:javascript
复制
  MainData$TransactionOrigin<-"Other"

  for (x in 1:nrow(MainData)){
  if (MainData$DistanceFromTarget1[x]<=7000)
  MainData$TransactionOrigin[x]="Target1"
  if (MainData$DistanceFromTarget2[x]<=4000)
  MainData$TransactionOrigin[x]="Target2"
}

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-11-28 10:57:37

关于Q2

如果你丢失了循环,它会运行得更快。

代码语言:javascript
复制
    MainData$TransactionOrigin <- "Other"
    MainData$TransactionOrigin[which(MainData$DistanceFromTarget1[x]<=7000)] <- "Target1"
    MainData$TransactionOrigin[which(MainData$DistanceFromTarget2[x]<=4000)] <- "Target2"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40814276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档