我在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或其他距離?請顯示模板代碼。看來你對這種方法的理解是合理的,因此它在哪裏掉下來? – roganjosh
如果他有節點和頂點,可能是Djikstra。 – MishaVacic