如何遍历NumPy邻接矩阵并按指定城市列表累加路径总距离
实现方案
首先注意不要使用list作为变量名,会覆盖Python内置的列表类型,建议将访问顺序列表命名为visit_order这类自定义名称。
1. 显式遍历实现(符合要求的遍历写法)
import numpy as np # 此处替换为你自己的n×n邻接矩阵 m = np.array([[...], [...]]) # 此处替换为你自己的城市访问顺序列表 visit_order = [1, 3, 4, 14, 26, 23] total_distance = 0 # 遍历到列表倒数第二个元素即可,每次取相邻两个城市对应的矩阵值累加 for i in range(len(visit_order) - 1): from_city = visit_order[i] to_city = visit_order[i + 1] total_distance += m[from_city][to_city] print(total_distance)
逻辑说明:假设访问列表长度为k,循环会执行k-1次,刚好对应m[visit_order[0]][visit_order[1]] + m[visit_order[1]][visit_order[2]] + ... + m[visit_order[k-2]][visit_order[k-1]]的求和规则,完全匹配需求。
2. 更高效的NumPy向量化实现(无显式遍历,性能更高)
如果处理的矩阵和访问路径规模较大,推荐用NumPy高级索引特性直接计算,代码更简洁,运行效率也远高于Python层的循环:
total_distance = m[visit_order[:-1], visit_order[1:]].sum()
内容的提问来源于stack exchange,提问作者Ádám Szalóczi
相关产品推荐
相关产品推荐

