更具体地说,我需要找到函数的第二高的最大值。让我们说当我绘制函数时,我得到一个最大值(1,10),但我真正想要的是在(4,9)找到的最大值。现在我使用max(函数)来找到最大值。
我的问题:
我使用了正确的功能吗?
我是否使用边界?如果是这样,怎么样?
提前感谢您提供任何帮助!
答案 0 :(得分:1)
I numpy> 1.8你可以使用np.partition
来获得数组的第k个最大元素:
>>> a = np.arange(11)
>>> np.random.shuffle(a)
>>> a
array([10, 8, 0, 3, 2, 9, 4, 1, 7, 5, 6])
>>> np.partition(a, -2) # second to last element is in the right position
array([ 5, 6, 0, 3, 2, 8, 4, 1, 7, 9, 10])
>>> np.partition(a, -2)[-2]
9
答案 1 :(得分:1)
您可以使用scipy.ndimage.maximum_filter()
查找本地最大值:
import numpy as np
from scipy import ndimage
Y, X = np.mgrid[-3:3:50j, -3:3:50j]
Z = 3 * (1 - X)**2 * np.exp(- X**2 - (Y + 1)**2) \
- 10 * (X / 5 - X**3 - Y**5) * np.exp(-X**2 - Y**2) \
- 1.0 / 3 * np.exp(-(X + 1)**2 - Y**2)
iy, ix = np.where(ndimage.maximum_filter(Z, size=(5, 5), mode="constant") == Z)
y, x, z = Y[iy, 0], X[0, ix], Z[iy, ix]
from matplotlib import pyplot as plt
fig, ax = plt.subplots()
ax.pcolormesh(X, Y, Z, cmap="gray")
ax.scatter(x, y, c=z, marker="x");
找到第二个峰值,只需numpy.argsort(z)
,并得到倒数第二个指数。
输出: