如何在Python中获取密度峰值
如何在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我希望这不是重复问题,但至少我找不到解决这个问题的答案。
如何在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。