Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一维numpy数组中获取相对极值_Python_Numpy_Scipy - Fatal编程技术网

Python 从一维numpy数组中获取相对极值

Python 从一维numpy数组中获取相对极值,python,numpy,scipy,Python,Numpy,Scipy,我正在编写代码,其中包括在数组中查找局部最大值/最小值的算法。但是我没有找到合适的函数 首先,我在scipy.signal中使用了argrelextrema b = [6, 1, 3, 5, 5, 3, 1, 2, 2, 3, 2, 1, 1, 9, 10, 10, 9, 8, 7, 7, 13, 10] scipy.signal.argrelextrema(np.array(b), np.greater) scipy.signal.argrelextrema(np.array(b), np.

我正在编写代码,其中包括在数组中查找局部最大值/最小值的算法。但是我没有找到合适的函数

首先,我在
scipy.signal
中使用了
argrelextrema

b = [6, 1, 3, 5, 5, 3, 1, 2, 2, 3, 2, 1, 1, 9, 10, 10, 9, 8, 7, 7, 13, 10]

scipy.signal.argrelextrema(np.array(b), np.greater)
scipy.signal.argrelextrema(np.array(b), np.greater_equal)
scipy.signal.argrelextrema(np.array(b), np.greater_equal, order=2)
结果是

(array([ 9, 20], dtype=int64),)
(array([ 0,  3,  4,  7,  9, 14, 15, 20], dtype=int64),)
(array([ 0,  3,  4,  9, 14, 15, 20], dtype=int64),)
[3(or 4), 9, 14(or 15), 20]
第一个没有抓住
b[3]
(或
b[4]
)。因此,我使用
np.greater_equal
将其修改为第二个。然而,在这种情况下,第一个值
b[0]
也被视为局部最大值,并且包括
b[7]
中的值2。通过使用第三个,我可以扔掉
b[7]
。但是当数据像
[1,3,1,4,1]
时,
order=2
仍然存在问题(它无法捕获3)

我的预期结果是

(array([ 9, 20], dtype=int64),)
(array([ 0,  3,  4,  7,  9, 14, 15, 20], dtype=int64),)
(array([ 0,  3,  4,  9, 14, 15, 20], dtype=int64),)
[3(or 4), 9, 14(or 15), 20]
我只想捕捉
b[3]、b[4]
中的一个(相同的值)。我想解决上面提到的
argrelextrema
的一些问题。下面的代码成功了

scipy.signal.find_peaks(b)
结果是
[3,9,14,20]


我写的代码是处理局部极大值和局部极小值对。所以我想用同样的方法求局部极小值。是否有类似于
scipy.signal.find_peaks
的函数来查找局部最小值?

您只需将
find_peaks
应用于阵列的负片版本:

from scipy.signal import find_peaks

min_idx = find_peaks([-x for x in b])
使用numpy阵列时更加方便:

import numpy as np
b = np.array(b)
min_idx = find_peaks(-b)

哦多么漂亮的解决方案!谢谢