内置函数argrelextrema Python背后的逻辑

时间:2015-06-04 21:55:35

标签: python arrays scipy

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]是否明显属于局部极值?那他们为什么不出现在输出中呢? 提前谢谢。

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仅适用于一维数组。