在給定範圍內搜索兩個數組中的元素我正在處理大數組的地球物理數據。我有兩個尺寸爲320x340的numpy陣列:第一個XLAT
包含網格中每個點的緯度,第二個XLON
包含網格中每個點的經度。所以每個i, j
描述的地面點緯度XLAT[i][j]
和經度XLON[i][j]
。使用numpy.where()
我有座標P_LAT
和P_LON
點,我必須找到距離給定點最近的4個點。首先,我寫了一個簡單的函數,它貫穿x軸和y軸上的所有點,但它使得320 * 340 = 108 800次迭代,並且工作非常緩慢(對於每個點約爲0.5秒):
for i in range(0, lat-1):
for j in range(0, lon-1):
if ST_LON >= XLON[i][j] and \
ST_LON < XLON[i][j + 1] and \
ST_LAT >= XLAT[i][j] and \
ST_LAT < XLAT[i + 1][j]:
return (True, i, i + 1, j, j + 1)
後來我發現約numpy.where()
一些信息,並寫了這個代碼:
for i in range(0, lat):
rows = numpy.where((XLON[i] >= ST_LON - 0.5) & (XLON[i] <= ST_LON + 0.5))
for j in rows[0]:
if ST_LON >= XLON[i][j] and \
ST_LON < XLON[i][j + 1] and \
ST_LAT >= XLAT[i][j] and \
ST_LAT < XLAT[i + 1][j]:
return (True, i, i + 1, j, j + 1)
此功能要快得多(〜0.015秒,每一點),但我不認爲這是正確的和美麗的解決方案
所以我的最後一個問題是我怎麼能找到兩個陣列中的項目,滿足以下條件:
XLON[i] <= ST_LON <= XLON[i][j+1]
和XLAT[i][j] <= ST_LAT <= XLAT[i+1][j]
,這應該迅速開展工作?
你的意思XLON [i] [j],而不是XLON [i]符合條件嗎? – quantummind
你已經設定了兩個目標。 1:找到最近的4個點。 2:找到滿足條件的項目。你想要什麼? – quantummind
XLON和XLAT的尺寸均爲320x340。條件是找到4個最接近的點,我試着用給定的條件。 – Greg