如何高效构建时间矩阵 优化Python对称矩阵重复计算问题
优化方案
因为时间矩阵是对称矩阵,满足times[i][j] = times[j][i],且对角线位置times[i][i]恒为0(同一个坐标的通行时长为0),所以我们只需要计算上三角区域(i<j)的结果,再同步赋值到对称的下三角位置即可,计算量直接减少近一半,坐标量级越大优化效果越明显。
优化后代码如下:
# 若已全局导入numpy可省略该行 import numpy as np def time_matrix(coordinates): n = len(coordinates) times = np.zeros((n, n), dtype=float) # 仅遍历上三角区域,跳过无需计算的对角线 for i in range(n): lon_i, lat_i = coordinates[i] for j in range(i + 1, n): lon_j, lat_j = coordinates[j] # 单次计算结果同时赋值给两个对称位置 duration = get_time(lon_i, lat_i, lon_j, lat_j) / 60 times[i][j] = duration times[j][i] = duration return times.tolist()
额外优化说明:
- 提前提取每个坐标的经纬度赋值给局部变量,避免循环中重复索引列表,进一步提升运行速度
- 如果后续
get_time函数支持批量输入多组坐标对计算,可以结合numpy向量化操作完全去掉Python层的循环,运行效率会有量级提升
内容的提问来源于stack exchange,提问作者vojta
相关产品推荐
相关产品推荐

