如何在Python中获取密度峰值

17 浏览
0 Comments

如何在Python中获取密度峰值

我正在制作一个类似于这个的密度图How to create a density plot in matplotlib? 我打算在图上的几个点上使用axvlines,我的问题是我需要知道最高峰的确切x值。\n我可以通过循环找到它:\n

    density = gaussian_kde(data)
    aa = 0
    bb = 0
    for i in range(data的最大值):
       if density(i)[0]>aa:
            aa = density(i)[0]
            bb = i

\n之后,bb将包含峰值的x值,但是执行这个循环的时间太长。目前大约需要25秒,而且未来数据的规模将更大\n我希望这不是重复问题,但至少我找不到解决这个问题的答案。

0
0 Comments

如何在Python中获得密度峰值

在Python中,要获得密度峰值可以使用numpy.argmax函数。下面是一个示例代码:

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

这段代码将计算与您发布的代码相同的`aa`和`bb`的值。然而,这只能找到整数值中的最大值。如果您查看Justin Peel的图表,您会发现峰值密度可能出现在某些非整数的`x-value`上。因此,为了找到峰值密度的更接近近似值,可以使用以下代码:

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

还有其他方法可以获得峰值的数量而不仅仅是最大值吗?

鉴于stackoverflow的目标是建立一个可搜索的存档,包含问题与答案的匹配,我们可以将此问题作为一个新问题提出。或者,在提问之前,可以查看stackoverflow.com/a/26309701/190597或stackoverflow.com/a/9113227/190597,并将2D解决方案调整为1D。

0