我使用的是numpy,特別是histrogram2d函數。 我使用2d直方圖對點的3D空間分佈(數組x
,y
和z
)進行裝箱。對於每個點,我都有一個關聯的密度字段d
。如何在Python中的每個二維直方圖中獲取最大值
如果我做類似的東西
import numpy as np
H, xedges, yedges = np.histogram2d(x,y,bins=200,weights=d)
直方圖H
代表沿着線的視線的密度(在這種情況下,在z軸)的總和。考慮到我正在處理非常大的陣列,這非常快速和容易。
現在我想更進一步,而不是繪製沿視線密度的總和,我想在每個二維bin中獲得最大密度。 我編寫了可能的解決方案:
from numpy import *
x=array([0.5,0.5,0.2,0.3,0.2,0.25,0.35,0.6,0.1,0.22,0.7,0.45,0.57,0.65])
y=array([0.5,0.5,0.28,0.18,0.85,0.9,0.44,0.7,0.1,0.22,0.7,0.45,0.54,0.65])
d=array([1,1,2,2,3,5,6,8,7,9,6,10,5,7])
bins=linspace(0,1,64)
idx=digitize(x,bins)
idy=digitize(y,bins)
img2=zeros((len(bins),len(bins)))
for i in arange(0,len(d)):
dummy=idx[i]
dummy2=idy[i]
img2[dummy][dummy2]=max(d[i],img2[dummy][dummy2])
但是在最後幾行的循環可能是一個巨大的數據集很慢。關於如何讓它更快的任何想法?
可能會你... http://stackoverflow.com/questions/10750894/numpy-histogram-how-to-take-the-maximum-value-in-each-bin – 2012-08-08 14:37:09
謝謝,這是一個問題我剛纔問過,但它是關於一維數組。我剛剛編輯了這個問題,以便按照我想要的方式獲得最大值,但可能會很慢,尤其是最後一部分。 – Brian 2012-08-08 16:14:55