2013-07-29 49 views
0

我正在製作一個像這樣的密度圖,How to create a density plot in matplotlib?即時將axvlines設置爲圖上的少量點,我的問題是我需要知道什麼是最高峯的精確x值。如何在python中獲得密度峯值

我可以用一個循環找到它:這款BB有峯值的x值,但要做到這一點循環的時間

density = gaussian_kde(data) 
    aa = 0 
    bb = 0 
    for i in range(max value of data): 
     if density(i)[0]>aa: 
      aa = density(i)[0] 
      bb = i 

後太長。現在大約需要25秒,未來數據的大小會更大

我希望這不是重複的,但至少我找不到這個問題。

+0

就幾點意見:'密度=密度= gaussian_kde(數據)'是一個奇怪的任務,你必須密度的兩倍。然後,除非你使用Python 3,否則你不應該使用'range'作爲數字,更好地使用'xrange',因爲它不會在內存中保存整個數字列表。 –

+0

噢。密度=密度= ..不存在 – TheLaama

回答

4

你可以使用numpy.argmax

ys = density(np.arange(9)) 
bb = np.argmax(ys) 
aa = ys[bb] 

這將計算的aabb相同的價值觀,你發佈的代碼。但是,這隻能在整數值x中找到最大值。如果你看Justin Peel's graph,你會發現峯密度可能出現在一些非整數x-value。所以,找到一個更接近於峯值密度,在此使用

xs = np.linspace(0,8,200) 
ys = density(xs) 
index = np.argmax(ys) 
max_y = ys[index] 
max_x = xs[index] 
+0

謝謝...得到它的工作 – TheLaama

+0

有沒有什麼辦法可以得到峯值數量不僅是最大值? – Yasmin

+0

由於stackoverflow的目標是建立一個*可搜索*存檔的良好的問題與良好的答案相匹配,讓我們做一個新的問題。或者,在詢問之前,請查看http://stackoverflow.com/a/26309701/190597或http://stackoverflow.com/a/9113227/190597,並將2D解決方案調整爲1D。 – unutbu