2013-05-16 86 views
2

我試圖創建一個包含發現指數在兩個條件得到滿足的經/緯度組合的陣列緯度/經度網格。這種方法可能太複雜,但使用meshgrid或numpy廣播也失敗了。如果有更好的方法,請隨時分享你的知識。 :-)列表以列表或多維名單列表的元素作爲網格

回合緯度/經度值gridsize的1°的分辨率,但是保留陣列的全長:

x = np.around(lon, decimals=0) 
y = np.around(lat, decimals=0) 

陣列由經度/緯度值的從-180到180和-82°到82°;可能的多douplets

檢查經/緯度多少度量可用於1°/ 1°網格點的每個組合:

a = arange(-180,181)  
b = arange(-82,83) 
totalgrid = [ [ 0 for i in range(len(b)) ] for j in range(len(a)) ] 
for d1 in range(len(a)): 
    for d2 in range(len(b)): 
     totalgrid[d1][d2]=np.where((x==a[d1])&(y==b[d2]))[0] 

此方法將失敗,並只返回一個空列表清單陣列。我無法弄清楚爲什麼它不能正常工作。

totalgrid[d1][d2]=np.where((x==a[0])&(y==b[0]))[0] 

返回所有發現指數從經度/緯度的是存在於-180°/ -82°: 通過更換最後一行。不幸的是它需要一段時間。我在某處丟失了一個for循環嗎?!

更詳細的問題: @askewchan 不幸的是這一個沒有解決我原來的問題。如預期的那樣,結果很好地代表了地面軌道。除了我需要每個網格點的總點數的事實之外,我還需要緯度/經度數組中的每個單獨的緯度/經度組合索引用於進一步的計算。 假設我有一個數組

lat(100000L,), lon(100000L,) and a third one array(100000L,) 

其對應於在每個點處測量。如果滿足條件,我需要經緯度的所有1°/ 1°組合的每個索引來檢查數組中的這個索引(100000L,)。現在讓我們假設lat/lon的指數[10000,10001,10002,...,10025]在同一個網格點上。對於那些索引,我需要檢查array [10000,10001,10002,..,10025]現在是否滿足條件,即np.where(array == 0)。用cts.nonzero()我只能得到直方圖中的索引。但是,那些對直方圖值有貢獻的每個點的所有信息都會丟失。希望你能得到我最初的問題。

+0

因此,你似乎需要一個列表'a'的列表,其中'a [i]'是一個「lat」和「lon」的所有指數列表都屬於第i個「1」檔? – askewchan

+0

不知道爲什麼我以前的文章現在工作。但它在每個lon/lat(d1/d2)點返回一個滿足條件的索引列表。但不幸的是,它需要幾分鐘。這是顯而易見的,因爲它通過緯度/經度迭代59040次。有更快的方法來獲得相同的結果嗎?我喜歡你的直方圖方法@askewchan,但不幸的是,我感興趣的所有信息都已丟失。 – nit

回答

1

不確定我是否理解這裏的目標,但是你想要計算每個1°部分有多少個經緯度對?這是一個直方圖的作用:

lon = np.random.random(5000)*2*180 - 180 
lat = np.random.random(5000)*2*82 - 82 

a = np.arange(-180,181) 
b = np.arange(-82,83) 

np.histogram2d(lon, lat, (a,b)) 
#(array([[ 0., 0., 1., ..., 0., 0., 0.], 
#  [ 0., 2., 0., ..., 0., 0., 1.], 
#  [ 0., 0., 0., ..., 0., 1., 0.], 
#  ..., 
#  [ 0., 1., 0., ..., 0., 0., 0.], 
#  [ 0., 0., 0., ..., 0., 0., 0.], 
#  [ 0., 0., 0., ..., 0., 0., 0.]]), 

,你有一個非零計數的指標是在:

cts.nonzero() 
#(array([ 0, 0, 0, ..., 359, 359, 359]), 
# array([ 2, 23, 25, ..., 126, 140, 155])) 

您可以繪製太:

cts, xs, ys = np.histogram2d(lon, lat, (a,b)) 

pyplot.imshow(cts, extent=(-82,82,-180,180)) 

latlonghist

+0

好吧,用你的直方圖我至少可以得到每一對的總數。因此,圖像或多或少代表衛星的地面軌跡。但是我需要在緯度/經度上對這些對的索引來檢查緯度/經度長度的第三個數組。因此我必須將索引存儲在一個數組中,對嗎?也許我覺得方式太複雜了,還有另一種方法。 – nit

+0

'cts.nonzero()'應該可以工作。 – askewchan

+0

對不起,我遲到的答案。不幸的是,這不能解決我原來的問題。由於評論的限制,我編輯了最初的帖子並添加了詳細的問題報告。 – nit