关于scipy:如何在python中获得密度峰值

how to get density peak in python

我正在做这样的密度图,如何在Matplotlib中创建密度图?我要在图上画几条轴线,我的问题是我需要知道,最高点的X值是多少。

我可以通过一个循环找到它:

1
2
3
4
5
6
7
    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

在此之后,bb具有峰值的x值,但执行此循环的时间太长。目前大约需要25秒,将来数据的大小会更大

我希望这不是重复的,但至少我找不到这个问题的答案。


您可以使用numpy.argmax:

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

这将计算与您发布的代码相同的aabb值。但是,这只会在x的整数值中找到最大值。如果你看JustinPeel的图,你会发现峰值密度可能出现在一些非整数x-value上。因此,为了更接近峰值密度,使用

1
2
3
4
5
xs = np.linspace(0,8,200)
ys = density(xs)
index = np.argmax(ys)
max_y = ys[index]
max_x = xs[index]