Python加速计算(大圆距离)

2024-04-27 21:09:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用坐标(lat1, lon1)和(lat2, lon2)计算两个数组中存储的点之间的大圆距离(角度)rho):

deg2rad = np.pi/180.0
rho_cos = (np.sin(lat1[:,None]*deg2rad)*np.sin(lat2[None,:]*deg2rad) +
      np.cos(lat1[:,None]*deg2rad)*np.cos(lat2[None,:]*deg2rad)*np.cos(np.abs(lon1[:,None] - lon2[None,:])*deg2rad))

rho = np.arccos(rho_cos) / deg2rad

数组lat1lon1包含约70000个数据点的数量级,lat2lon2包含约1200个数据点的数量级。我需要用不同的坐标数组进行多次(~100000)计算。可能的唯一lat1lat2值来自具有450个数据点的数组,可能的唯一lon1lon2值来自具有900个数据点的数组

目前,计算“缓慢”(在约100000次迭代的预期总时间意义上),在单个核心上,每次迭代约需4.5秒。如何加快计算速度?有索引的所有可能的坐标对的巨大查找表?并行化?更快的numpyscipy本机函数


Tags: 数据none距离np数组sincos大圆