首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取给定地理区域中的位置(代码优化)

获取给定地理区域中的位置(代码优化)
EN

Stack Overflow用户
提问于 2019-03-10 21:18:32
回答 1查看 30关注 0票数 0

我有一个带有纬度和经度的地点(restaurants)的DataFrame和一个带有纬度和经度的邻里(area)。

我想,对于每个社区,计算一下3公里范围内的餐馆数量(numberR)。

我已经写了下面的代码,它可以工作:

代码语言:javascript
运行
复制
df=pd.DataFrame()
numberR=[]
radius=3

for element in range(0,area['lon'].count()): #for every neighborhood  
    df=pd.DataFrame()
    df['destLat']=restaurants['lat']
    df['originLat']=areas['lat'][element]
    df['destLon']= restaurants['lng']
    df['originLon']=area['lon'][element]

    for i, row in df.iterrows():
        #for every restaurant I compute the distance from my neighborhood in km
        l=[haversine(df.originLon[i],df.originLat[i],df.destLon[i],df.destLat[i]) for i, row in df.iterrows()]

    numberR.append(sum(x<radius for x in l))

然而,我想让代码更快,因为它是非常慢的。

你知道我怎样才能在更短的时间内达到同样的效果吗?

提前谢谢。

P.S. haversine是从lat和lng开始的以公里为单位的众所周知的距离函数。

EN

回答 1

Stack Overflow用户

发布于 2019-03-10 22:34:48

我建议您使用scipy.spacial.distance中的函数。

代码语言:javascript
运行
复制
from scipy.spatial.distance import cdist

distances = cdist(areas, restaurants, metric=haversine)  # metric accepts a callable
sum(distances > 3)  # sums columns

cdist函数计算两个DataFrames的每对行之间的距离。

此外,您还应该修改haversine函数,使其能够接受DataFrame行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55088080

复制
相关文章

相似问题

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