argrelextrema
中有这个函数scipy.signal
,它在数组中找到局部极值。
这就是我试过的:
import numpy as np
from scipy.signal import argrelextrema
z = np.array([[56,32,12,10,13],[33,55,77,32,11],[12,66,89,43,33]])
argrelextrema(z, np.greater)
输出:
(array([], dtype=int64), array([], dtype=int64))
元素z[1][2]
和z[2][2]
是否明显属于局部极值?那他们为什么不出现在输出中呢?
提前谢谢。
答案 0 :(得分:1)
argrelextrema带有一个axis
arg,默认为0
,这可能是违反直觉的。因此,在您的主要示例中,在这种情况下,它们确实不是局部最大值。在回答@tamasgal的第二个示例中,12 <98> 89,因此确实存在局部最大值,如输出所示,在第1行第2列。
如果您在通话中设置了axis=1
,则会返回正确的结果:
import numpy as np
from scipy.signal import argrelextrema
z = np.array([[56,32,12,10,13],[33,55,77,32,11],[12,66,89,43,33]])
argrelextrema(z, np.greater, axis=1)
输出:
(array([1, 2]), array([2, 2]))
请注意,如果您想使用np.greater
作为运算符,也有argrelmax别名。
答案 1 :(得分:0)
argrelextrema
仅适用于一维数组。