Find Minimum for element in multiple dimensional array

Robert Davis rdavis7408 at gmail.com
Thu Jul 23 14:31:35 CEST 2015


On Wednesday, July 22, 2015 at 5:54:30 PM UTC-5, Robert Davis wrote:
> Given a set of arrays within an array how do I find the arrays with the minimum values based on two elements/columns in the array? Those two elements/columns are the destination zip code and distance.
> 
> I have an array of arrays that have a origin zip code, origin latitude, origin longitude, destination zip code, destination latitude, destination longitude, and miles between the two points.
> 
> I need to keep only those combinations that represent the minimum mileage between to the destination zip code. For example a point in New Jersey may have a distance from the Philadelphia Office that is 45 miles, from the Newark Office that is 78 miles and one from the Delaware Office that is 58 miles.
> 
> I need to keep the mileage from the Philadelphia Office that is 45 miles and produce a .csv file that has origin zip code, origin latitude, origin longitude, destination zip code, destination latitude, destination longitude, and miles between the two points.
> 
> The array looks like this:
> 
> [['37015', 'TN31', 36.2777, -87.0046, 'NY', 'White Plains', '10629', 41.119008, -73.732996, 77.338920003], 
> ['72202', 'ARB1', 34.739224, -92.27765, 'NY', 'White Plains', '10629', 41.119008, -73.732996, 1099.7837975322097]]
> 
> My code looks like this :
> 
> import csv
> import math
> 
> 
> def calculate_distance(lat1, lon1, lat2, lon2):
> 
>     if (not lat1) or (not lon1) or (not lat2) or (not lon2):
>             return -1
> 
>     lat1 = float(lat1) * math.pi/180
>     lon1 = float(lon1) * math.pi/180
>     lat2 = float(lat2) * math.pi/180
>     lon2 = float(lon2) * math.pi/180
> 
>     return 3959.0 * math.acos(math.sin(lat1) * math.sin(lat2) +   math.cos(lat1) * math.cos(lat2) * math.cos(lon2-lon1))
> 
> #Above function changed from the following URL: http://iamtgc.com/geocoding- with-python/
> 
> 
> InputPath = "C:\\Users\\jacobs\\Downloads\\ZipCodes\\"
> 
> ZipCodes = "zipcode.csv"
> RptgOfficeFile = "Reporting_Office_2015072001.csv"
> InputFile = InputPath+RptgOfficeFile
> zInputFile = InputPath+ZipCodes
> zOutputFile = InputPath+'Zip_Code_Distance.csv'
> z1OutputFile = InputPath+'Minimum_Distance_Zip_Code_File.csv'
> 
> 
> f = open(InputFile, 'r')
> 
> zO = open(zOutputFile,'w')
> z1 = open(z1OutputFile,'w')
> 
> lines = [ ]
> OfficeZipcodes = []
> ZipRptOffice = {}
> OLatitude = [ ]
> OLongitude = [ ]
> OLocationCode = []
> dzip = []
> dLatitude = []
> dLongitude = []
> dCity = []
> dState = []
> Combined =[]
> Answers = []
> 
> for line in f:
>   l = [i.strip() for i in line.split(',')]
>   OfficeZipcodes.append(l[4])
>   ZipRptOffice[l[4]]= l[3]
>   OLatitude.append(l[5])
>   OLongitude.append(l[6])
>   OLocationCode.append(l[3])
> 
> del OfficeZipcodes[0]
> del OLatitude[0] 
> del OLongitude[0]
> del OLocationCode[0]
> 
> 
> zf = csv.DictReader(open(zInputFile))
> #http://courses.cs.washington.edu/courses/cse140/13wi/csv-parsing.html
> 
> for row in zf:
>     dzip.append(row["zip"])
>     dLatitude.append(float(row["latitude"]))
>     dLongitude.append(float(row["longitude"]))
>     dCity.append(row["city"])
>     dState.append(row["state"])
> 
> 
> for i in range(len(OfficeZipcodes)):
>     for j in range(len(dzip)):
>         Distance = calculate_distance(OLatitude[i], OLongitude[i],dLatitude[j],dLongitude[j])
>         Combined.append([OfficeZipcodes[i], OLocationCode[i],float(OLatitude[i]),float(OLongitude[i]),dState[j],dCity[j],dzip[j], dLatitude[j],dLongitude[j],Distance])
> for i in range(len(Combined)):
>   zO.write(str(Combined[i][0])+","+str(Combined[i][1])+","+str(Combined[i][2])+","+ str(Combined[i][3])+","+str(Combined[i][4])+","+ str(Combined[i][5])+","+ str(Combined[i][6])+","+str(Combined[i][7])+","+ str(Combined[i][8])+","+str(Combined[i][9])+"\n")
> 
> zO.close()
> f.close()
> 
> I am using Python 2.7 on a Windows 7 machine.
> 
> Please help me get my head around how to accomplish this task.
> 
> Thank you very much.
> 
> Robert Davis

Emile,

Thank you I will give it a try and see if I can get it to work. 

I really do appreciate your effort.

Robert


More information about the Python-list mailing list