我希望有人能幫助我。我正在檢查我擁有的一組坐標是否在颶風軌道的坐標范圍內。我的資料集非常大(超過 10k),所以我只取了一個小樣本來展示我的代碼。當我運行我的 for 回圈和 if 陳述句時,回圈似乎比它應該迭代的次數更多(它似乎沒有移動到下一個迭代)。在代碼中,串列串列ida是我的颶風軌跡坐標,而sample是我的位置坐標,帶有 ID 列。
ida = [['IDA', 18.6, -80.5],
['IDA', 18.619048, -80.571429],
['IDA', 18.638095, -80.642857],
['IDA', 18.657143, -80.714286],
['IDA', 18.67619, -80.785714],
['IDA', 18.695238, -80.857143],
['IDA', 18.714286, -80.928571],
['IDA', 18.733333, -81.0],
['IDA', 18.752381, -81.071429],
['IDA', 18.771429, -81.142857]]```
sample = ```[[25820, 25.891041, -80.383553], [25821, 34.016776, -117.837528], [25822, 33.812013, -117.886268], [25823, 47.980291, -122.207616], [25824, 32.553882, -116.978896], [25825, 34.102001, -118.324049], [25826, 33.410692, -112.418414], [25827, 51.503139, 5.477582], [25828, 52.248382, -0.810513], [99999, 18.6, -80.5]]```
注意:樣本中的最后一個串列是自行輸入的,以檢查回圈是否正常作業(與風暴坐標相同的點)
貨物[0][1] == ID。
回圈:
ID_exposed = []
for loc in sample:
for H in ida:
if ((loc[1] > H[1]-0.6) and (loc[1] < H[1] 0.6)) and (loc[2] > H[2]-0.7) and (loc[2] < H[2] 0.7):
ID_exposed.append(loc)```
print(ID_exposed)
輸出:
[[99999, 18.6, -80.5], [99999, 18.6, -80.5], [99999, 18.6, -80.5], [99999, 18.6, -80.5], [99999, 18.6, -80.5], [99999, 18.6, -80.5], [99999, 18.6, -80.5], [99999, 18.6, -80.5], [99999, 18.6, -80.5], [99999, 18.6, -80.5]]
感謝社區!
uj5u.com熱心網友回復:
這有點令人困惑,您是不是要檢查每個示例元素的每個 IDA 元素。現在你的回圈應該運行 len(sample)*len(IDA) 次。您可以在最里面的回圈中放置一個簡單的計數來驗證這一點。
uj5u.com熱心網友回復:
所以我對你期望的輸出有點困惑。您的代碼現在正在做的事情是遍歷您的sample串列,并且對于其中的每次迭代sample都遍歷ida. 如果通過了一定數量的標準,它將將該迭代添加sample到您的ID_exposed串列中。它會繼續執行此操作,直到您瀏覽完sample串列中的每個專案。
如果您希望它在向串列中添加一定數量的位置后停止,您應該添加一個計數器和一個帶有breakorcontinue陳述句的 If 陳述句:
ID_exposed.append(loc)
counter = 1
if counter > 5: #make it whatever number you want
break #the loop with break, and you will now exit your for loop
如果您正在尋找其他內容,則需要更新您的問題,以便我們更好地了解問題。
uj5u.com熱心網友回復:
tl; dr:在滿足您的條件并將 loc 附加到 ID_exposed 后添加一個斷行。這不會解決您的代碼運行次數過多的問題,但它有助于阻止重復點被添加到您的 ID_exposed 串列中。
你好,
當我運行您的代碼時,它看起來像是一遍又一遍地附加相同的資料點。在您提供的樣本中,有一個 ID 符合您的條件。但是,它會進行 10 次精確比較并每次都附加它。
因此,我建議每次滿足您的條件并附加資料時添加一個中斷。這將回圈數從 100 減少到 90,并且 ID_exposed 的長度從 10 減少到 1。
對于每個樣本點,您似乎也在迭代 ida 資料。所以它應該回圈的次數等于 len(ida) * len (sample)。在這個例子中,ida 和 sample 的長度都是 10,所以它應該回圈 10 x 10 或 100 次。每次回圈通過該函式時,我都使用計數器運行它,最后計數器為 100,這表明代碼正在運行正確的次數。
下面是我用來驗證它運行正確次數的示例。
ID_exposed = []
ct = 0
for loc in sample:
for H in ida:
if ((loc[1] > H[1]-0.6) and (loc[1] < H[1] 0.6)) and (loc[2] > H[2]-0.7) and (loc[2] < H[2] 0.7):
ID_exposed.append(loc)
ct = 1
print(ID_exposed)
print(ct)
這是我為使其運行 90 次而不是 100 次所做的更改
ID_exposed = []
ct = 0
for loc in sample:
for H in ida:
if ((loc[1] > H[1]-0.6) and (loc[1] < H[1] 0.6)) and (loc[2] > H[2]-0.7) and (loc[2] < H[2] 0.7):
ID_exposed.append(loc)
break
ct = 1
print(ID_exposed)
print(ct)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490919.html
