2017-03-29 8 views
1
start = time.time() 
import csv 
f = open('Speed_Test.csv','r+') 
coordReader = csv.reader(f, delimiter = ',') 
count = -1 
successful_trip = 0 
trips = 0 

for line in coordReader: 
    successful_single = 0 
    count += 1 
    R = interval*0.30 
    if count == 0: 
     continue 
    if 26 < float(line[0]) < 48.7537144 and 26 < float(line[2]) < 48.7537144 and -124.6521017 < float(line[1]) < -68 and -124.6521017 < float(line[3]) < -68: 
     y2,x2,y1,x1 = convertCoordinates(float(line[0]),float(line[1]),float(line[2]),float(line[3])) 
     coords_line,interval = main(y1,x1,y2,x2) 

     for item in coords_line: 
      loop_count = 0 
      r = 0 
      min_dist = 10000 

      for i in range(len(df)): 
       dist = math.sqrt((item[1]-df.iloc[i,0])**2 + (item[0]-df.iloc[i,1])**2) 
       if dist < R: 
        loop_count += 1 
        if dist < min_dist: 
         min_dist = dist 
         r = i 
      if loop_count != 0: 
       successful_single += 1 
       df.iloc[r,2] += 1 

     trips += 1 
     if successful_single == (len(coords_line)): 
      successful_trip += 1 

end = time.time() 
print('Percent Successful:',successful_trip/trips) 
print((end - start)) 

私はこのコードを持っていて、それは非常に時間がかかるでしょうが、私が望むだけの速さで実行することはできません。プロセスをスピードアップするために私ができるバットから誰かが見えるものはありますか?どんな提案も大歓迎です。Pythonコード時間の高速化

本質的に2つの緯度および経度座標を読み込み、それらをデカルト座標に変更し、原点座標から目的の座標までの距離に応じて特定の間隔の長さのすべての座標を通過します。これは、300 +の座標位置を持つデータフレーム(df)が存在するにもかかわらず、トリップ間隔の各1つに対してチェックし、1つが半径R内にあるかどうかを確認し、最短で格納します。

+3

を必要とするかもしれないが、私が代わりに[コードレビューの姉妹サイトでこれを掲示することをお勧めしたい示唆](https://codereview.stackexchange.com/)。 – ShadowRanger

答えて

0

結果が判明したら、forループから抜け出す機会を利用してください。たとえば、for lineループの最後に、successful_single == len(coords_line)かどうかを確認します。しかし、文if loop_count != 0がFalseの場合はいつでも発生します。その時点でsuccessful_singleは増分されません。あなたはその価値が決してlen(coords_line)に達することを知っています。だから、あなたはfor itemのループから抜け出すことができます - あなたはすでに "成功した旅"ではないことを知っています。このような状況が他にあるかもしれません。