基于经纬度矩阵计算距离矩阵
给定一个矩阵,计算距离矩阵是一个非常常见的需求,比如给定一个特征矩阵需要计算距离矩阵。自己写的话虽然简单每次写也往往很烦,而且自己写的代码效率过低了,使用scipy中的包的话无疑会好一点,具体来说,使用scipy.spatial.distance,该包的具体介绍可以看一下官网和这个博客。
下面贴一个我写的基于经纬度矩阵,计算两两间的距离的代码:
具体矩阵的形式是一个dataframe,一列是经度,一列是纬度,如下图所示,下面代码中的cam就是这个dataframe。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial.distance import pdist
from scipy import spatial
import math# 定义通过经纬度计算直线距离的函数
from math import radians, cos, sin, asin, sqrt
def geodistance(lng1,lat1,lng2,lat2):if lng1 == None or lng2 == None or lat1 == None or lat2 == None:return 999999elif (lng1 < 119 or lng1 > 121) or (lng2 < 119 or lng2 > 121) or (lat1 < 29 or lat1 > 30) or (lat2 < 29 or lat2 > 30):return 999999lng1 = float(lng1) ; lng2 = float(lng2) ; lat1 = float(lat1) ; lat2 = float(lat2)lng1,lat1,lng2,lat2 = map(radians,[lng1,lat1,lng2,lat2])dlon = lng2-lng1dlat = lat2-lat1a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2distance = 2* asin(sqrt(a))*6371*1000distance = round(distance/1000,3)return distance
def caldis(u,v):# 计算输入矩阵中两个向量的距离return geodistance(u[0],u[1],v[0],v[1])# 将cam转化为向量的形式
X = cam.values
X_mat = spatial.distance.squareform(pdist(X , metric=caldis))
上面代码得到的X_mat就是每两个经纬度点之间的直线距离了。
下面我还希望求出这个距离矩阵中每一行中距离小于等于1的个数,并将这个个数保存到dataframe cam中去,代码如下:
def sma1(ser):return (len(ser[ser<=1]))
cam['devdes'] = np.apply_along_axis(sma1, 1, X_mat)
如果不是一个矩阵各个样本两两间的距离,而是两个矩阵两两间的距离,则可以使用函数from scipy.spatial.distance import cdist,代码如下:
X_mat = cdist(cam[['lng','lat']].values , tmp[['lng','lat']].values , metric=caldis)
得到的结果是len(cam[[‘lng’,‘lat’]])行,len(tmp[[‘lng’,‘lat’]].values)列的一个矩阵,第i,j个元素代表的含义是cam[[‘lng’,‘lat’]]第i行和tmp[[‘lng’,‘lat’]]第j列两个元素的距离。
基于经纬度矩阵计算距离矩阵相关推荐
- R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数、阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化、基于数据阳性样本比例选择合适的分类评估指标
R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数.阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化.基于数据阳性样本比例选择合适的分类评估指标 目录
- R语言构建logistic回归模型并评估模型:计算混淆矩阵、并基于混淆矩阵计算Accuray、Precision、Recall(sensitivity)、F1、Specificity指标
R语言构建logistic回归模型并评估模型:计算混淆矩阵.并基于混淆矩阵计算Accuray.Precision.Recall(sensitivity).F1.Specificity指标 目录
- 计算机应用研究潜规则,基于相容矩阵计算的不完备决策系统规则获取算法
基于相容矩阵计算的不完备决策系统规则获取算法 针对不完备信息决策系统问题,引入相容关系下条件属性矩阵和决策属性矩阵的相关概念,并由此提出一种基于矩阵计算的不 (本文共6页) 阅读全文>> ...
- mysql数据范围什么意思_数据都在mysql里的话,基于经纬度的范围查询有什么高效的方案吗...
[今日话题] 数据都在mysql里的话,基于经纬度的范围查询有什么高效的方案吗 – yingang 1. 经纬度搜索(1)-Geohash算法原理 http://hankesi2000.iteye.c ...
- 【K-Means】基于经纬度的城市聚类
文章目录 1. 项目准备 1.1. 问题导入 1.2. 数据集简介 2. K-Means算法 2.1. 算法特点 2.2. 算法流程 2.3. 算法缺陷 2.4. 算法改进 3. 实验步骤 3.1. ...
- 基于Optaplanner和距离矩阵 实践动态路径规划
optaplanner根据百度地图计算实际距离规划路线 https://blog.csdn.net/kentis/article/details/81324631 UserCase:从上海枢纽配送中心 ...
- 基于经纬度进行商圈定位
一:使用高德地图的接口 获取key的步骤: 1.申请网站: https://lbs.amap.com/ 2.登陆注册 3.选择开发支持–>web服务API 4.进入控制台–>我的应用 5. ...
- 基于经纬度和工作日的拜访轨迹问题
一 问题描述 设有 n 家客户,n <= 24,每个客户有如下属性(客户名称.客户类型.经度.纬度.每月拜访次数). 每个客户 m 天拜访 1 次. 每个客户每天最多拜访 8 次. 给出一个月的 ...
- 基于经纬度的拜访轨迹问题
一 问题描述 设有 n 家客户,n<=31,每个客户有如下属性(客户名称.客户类型.经度.纬度.每月拜访次数). 每个客户 times 天拜访 1 次. 每个客户每天最多拜访 8 次. 每月天数 ...
- python基于经纬度距离汇聚点_python实现两个经纬度点之间的距离和方位角
from:http://blog.csdn.net/zhuqiuhui/article/details/53180395 1. 求两个经纬点的方位角,P0(latA, lonA), P1(latB, ...
最新文章
- faiss简介及示例
- [pytorch、学习] - 9.1 图像增广
- vue.js 引用背景图 background 无效的3种解决办法
- 测试学开发——第一课:环境搭建与页面开发介绍。
- php计算一段时间工作日,PHP计算8小时工作日的一半
- JQuery学习记录——jQuery对象和DOM对象的转换
- Python JSONPath示例
- android 删除特定字符串,android-从改造响应中删除不需要的字符串
- 双变量空间自相关_空间计量经济学的发展及其应用,经济模型总会需要
- python HTTP请求过程
- 微软补丁地址以及查找方式
- r语言 断轴 画图_R语言之画图(一)
- 2019长安大学ACM校赛网络同步赛 B	Trial of Devil (递归)
- SpringBoot 使用异常自定义错误码
- 阿里云主体变更和备案过程
- 马尔可夫蒙特卡洛(MCMC)-从平稳分布,细致平衡到Metropolis-Hastings和Gibbs采样
- 计算机房电源引入方式,(完整版)通信机房电源计算公式.pdf
- 微软正式宣布 Visual Studio 2022!
- 浏览器上查看微信公众号的所有历史文章
- 树的遍历(Java)