【发布时间】:2017-08-03 19:14:58
【问题描述】:
我在 Python 中进行成对计算时遇到了一些麻烦。
我有两组节点(例如供应商和客户)。
- 设置 1:SupplierCO = (Xco, Yco) 用于多个供应商
- 第 2 组:多个客户的客户 CO = (Xco, Yco)
我想计算一个客户和所有供应商之间的距离,并保存最短的距离。这应该为所有客户循环。
我意识到我必须使用两个 for 循环和一个 if 函数。但我不明白如何在循环时从正确的点选择坐标。
感谢您的回复! 更多信息: - 正弦距离 - 第 1 组中的每个点都必须与第 2 组中的所有点进行比较 - 这就是我目前所做的
import urllib.parse
from openpyxl import load_workbook, Workbook
import requests
from math import radians, cos, sin, asin, sqrt
"""load datafile"""
workbook = load_workbook('Macro.xlsm')
Companysheet = workbook.get_sheet_by_name("Customersheet")
Networksheet = workbook.get_sheet_by_name("Suppliersheet")
"""search for column with latitude/longitude - customers"""
numberlatC = -1
i = 0
for col in Customersheet.iter_cols():
if col[2].value == "Latitude" :
numberlatC = i
i+=1
numberlongC = -1
j = 0
for col in Customersheet.iter_cols():
if col[2].value == "Longitude" :
numberlongC = j
j+=1
latC = [row[numberlatC].value for row in Companysheet.iter_rows() ]
longC = [row[numberlongC].value for row in Companysheet.iter_rows()]
# haversine formula
dlon = lonC - lonS
dlat = latC - latS
a = sin(dlat/2)**2 + cos(latC) * cos(latS) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles
distance = c*r
distances.append([distance])
return distances
customers = [latC, longC]
谢谢!
【问题讨论】:
-
您对答案有何期待?我们需要您的数据来为您提供任何具体的代码。
-
缺少相当多的信息。欧几里得、Haversine 或其他距离?请显示模板代码。看来您对这种方法的想法是合理的,那么它在哪里落空了?
-
如果他有节点和顶点,他可能是 Djikstra。
-
@mishavacic 好的,我错过了“最短距离”部分。你可能是对的。
-
如果我用谷歌搜索你的确切问题标题,你的问题就是第一个结果。 This is the second result
标签: python python-3.x loops pairwise