2014-03-19 87 views
2

我有一組數據。他們分佈在x-y職位,但他們有其他特徵,如大小。我喜歡在x-y平面中網格化數據,然後獲取每個點的網格索引,然後計算每個網格單元中大小的平均值或標準偏差。我想看看是否與x-y平面中的位置與大小有關。舊式的方式是編寫兩個循環並製作一個3D矩陣,以保持每個單元格中的數據索引。我想知道在numpy或python中是否有這樣的類?查找每個網格單元格中數組的索引?

我知道我可以使用np.histogram2d,但它只是返回每個網格中點的數量,但不是每個點中的數組索引或matplotlib.mlab.griddata以某種方式插入網格單元格之間,但我不想插入任何內容。我只是有興趣得到每個網格單元中的點的索引。

xmin=min(Xpos);xmax=max(Xpos) 
ymin=min(Ypos);ymax=max(Ypos) 
ngridx = 10 
ngridy = 10 

xi = np.linspace(np.floor(xmin),np.ceil(xmax),ngridx) 
yi = np.linspace(np.floor(ymin),np.ceil(ymax),ngridy) 
H, xedges, yedges = np.histogram2d(Ypos, Xpos, bins=(xi, yi), normed=False) 

np.histogram2d輸出看起來是這樣的:

>>>H 
array([[ 17., 114., 301., 321., 308., 163., 171., 298., 316.], 
     [ 223., 211., 291., 323., 282., 195., 263., 198., 174.], 
     [ 304., 312., 322., 295., 218., 295., 259., 209., 80.], 
     [ 204., 260., 298., 261., 296., 241., 47., 133., 189.], 
     [ 270., 265., 245., 265., 286., 236., 108., 214., 275.], 
     [ 276., 198., 275., 235., 261., 267., 223., 306., 282.], 
     [ 246., 60., 88., 189., 259., 225., 302., 306., 328.], 
     [ 292., 138., 0., 141., 297., 308., 314., 276., 317.], 
     [ 169., 203., 67., 220., 261., 306., 329., 250., 277.]]) 

但我想獲得在每個網格單元的指數。我正在尋找最快的方式來做到這一點。 我想出了這個想法。我不知道是去還是不去的最佳方式:

for i in range(len(xi)-1): 
    for j in range(len(yi)-1): 
     bxlow=(Xpos>xi[i]); bxup=(Xpos<=xi[i+1]) 
     bx=bxlow*bxup 
     bylow=(Ypos>yi[j]); byup=(Ypos<=yi[j+1]) 
     by=bylow*byup 
     bprim=bx*by 

使用bprim區分的網格數據。 有什麼更好的建議?

+0

您是否還可以顯示一些代碼,並說明您已取得進展,以便我們更好地理解您的問題? – sshashank124

+0

請用一個例子顯示一些代碼... – logc

+0

爲什麼不簡單計算x,y和大小變量之間的相關性? – goncalopp

回答

相關問題