matplotlib argrelmax 没有找到所有的最大值
matplotlib argrelmax doesn't find all maxes
我有一个项目,我正在对模拟数据进行采样并尝试使用 matplotlib 进行分析。目前,我的模拟数据源是连接到微控制器的电位器,但这与问题无关。这是我的代码
arrayFront = RunningMean(array(dataFront), 15)
arrayRear = RunningMean(array(dataRear), 15)
x = linspace(0, len(arrayFront), len(arrayFront)) # Generate x axis
y = linspace(0, len(arrayRear), len(arrayRear)) # Generate x axis
min_vals_front = scipy.signal.argrelmin(arrayFront, order=2)[0] # Min
min_vals_rear = scipy.signal.argrelmin(arrayRear, order=2)[0] # Min
max_vals_front = scipy.signal.argrelmax(arrayFront, order=2)[0] # Max
max_vals_rear = scipy.signal.argrelmax(arrayRear, order=2)[0] # Max
maxvalfront = max(arrayFront[max_vals_front])
maxvalrear = max(arrayRear[max_vals_rear])
minvalfront = min(arrayFront[min_vals_front])
minvalrear = min(arrayRear[min_vals_rear])
plot(x, arrayFront, label="Front Pressures")
plot(y, arrayRear, label="Rear Pressures")
plot(x[min_vals_front], arrayFront[min_vals_front], "x")
plot(x[max_vals_front], arrayFront[max_vals_front], "o")
plot(y[min_vals_rear], arrayRear[min_vals_rear], "x")
plot(y[max_vals_rear], arrayRear[max_vals_rear], "o")
xlim(-25, len(arrayFront) + 25)
ylim(-1000, 7000)
legend(loc='upper left')
show()
dataFront 和 dataRear 是 python 列表,用于保存来自 2 个电位器的采样数据。 RunningMean 是一个调用的函数:
convolve(x, ones((N,)) / N, mode='valid')
问题是 argrelmax(和最小值)函数并不总能找到所有最大值和最小值。有时它找不到任何最大值或最小值,这导致我在这段代码中出现问题
maxvalfront = max(arrayFront[max_vals_front])
maxvalrear = max(arrayRear[max_vals_rear])
minvalfront = min(arrayFront[min_vals_front])
minvalrear = min(arrayRear[min_vals_rear])
因为 [min_vals_(空白)] 变量为空。有谁知道这里发生了什么,我能做些什么来解决这个问题?提前致谢。
这是其中一张未找到所有最大值和最小值的数据图表:
signal.argrelmin
is a thin wrapper around signal.argrelextrema
与 comparator=np.less
。 np.less(a, b)
returns a < b
元素的真值。请注意,np.less
要求 a
严格小于 b
才能为真。
Your data在很多相邻位置都有相同的最小值。在局部极小值处,局部极小值与其邻居的不等式不满足严格小于关系;相反,它仅满足 严格小于或等于 关系。
因此,要找到这些极值,请使用 signal.argrelmin
和 comparator=np.less_equal
。例如,使用您数据中的片段:
import numpy as np
from scipy import signal
arrayRear = np.array([-624.59309896, -624.59309896, -624.59309896,
-625., -625., -625.,])
print(signal.argrelmin(arrayRear, order=2)[0])
# []
print(signal.argrelextrema(arrayRear, np.less_equal)[0])
# [0 1 3 4 5]
print(signal.argrelextrema(arrayRear, np.less_equal, order=2)[0])
# [0 3 4 5]
我有一个项目,我正在对模拟数据进行采样并尝试使用 matplotlib 进行分析。目前,我的模拟数据源是连接到微控制器的电位器,但这与问题无关。这是我的代码
arrayFront = RunningMean(array(dataFront), 15)
arrayRear = RunningMean(array(dataRear), 15)
x = linspace(0, len(arrayFront), len(arrayFront)) # Generate x axis
y = linspace(0, len(arrayRear), len(arrayRear)) # Generate x axis
min_vals_front = scipy.signal.argrelmin(arrayFront, order=2)[0] # Min
min_vals_rear = scipy.signal.argrelmin(arrayRear, order=2)[0] # Min
max_vals_front = scipy.signal.argrelmax(arrayFront, order=2)[0] # Max
max_vals_rear = scipy.signal.argrelmax(arrayRear, order=2)[0] # Max
maxvalfront = max(arrayFront[max_vals_front])
maxvalrear = max(arrayRear[max_vals_rear])
minvalfront = min(arrayFront[min_vals_front])
minvalrear = min(arrayRear[min_vals_rear])
plot(x, arrayFront, label="Front Pressures")
plot(y, arrayRear, label="Rear Pressures")
plot(x[min_vals_front], arrayFront[min_vals_front], "x")
plot(x[max_vals_front], arrayFront[max_vals_front], "o")
plot(y[min_vals_rear], arrayRear[min_vals_rear], "x")
plot(y[max_vals_rear], arrayRear[max_vals_rear], "o")
xlim(-25, len(arrayFront) + 25)
ylim(-1000, 7000)
legend(loc='upper left')
show()
dataFront 和 dataRear 是 python 列表,用于保存来自 2 个电位器的采样数据。 RunningMean 是一个调用的函数:
convolve(x, ones((N,)) / N, mode='valid')
问题是 argrelmax(和最小值)函数并不总能找到所有最大值和最小值。有时它找不到任何最大值或最小值,这导致我在这段代码中出现问题
maxvalfront = max(arrayFront[max_vals_front])
maxvalrear = max(arrayRear[max_vals_rear])
minvalfront = min(arrayFront[min_vals_front])
minvalrear = min(arrayRear[min_vals_rear])
因为 [min_vals_(空白)] 变量为空。有谁知道这里发生了什么,我能做些什么来解决这个问题?提前致谢。
这是其中一张未找到所有最大值和最小值的数据图表:
signal.argrelmin
is a thin wrapper around signal.argrelextrema
与 comparator=np.less
。 np.less(a, b)
returns a < b
元素的真值。请注意,np.less
要求 a
严格小于 b
才能为真。
Your data在很多相邻位置都有相同的最小值。在局部极小值处,局部极小值与其邻居的不等式不满足严格小于关系;相反,它仅满足 严格小于或等于 关系。
因此,要找到这些极值,请使用 signal.argrelmin
和 comparator=np.less_equal
。例如,使用您数据中的片段:
import numpy as np
from scipy import signal
arrayRear = np.array([-624.59309896, -624.59309896, -624.59309896,
-625., -625., -625.,])
print(signal.argrelmin(arrayRear, order=2)[0])
# []
print(signal.argrelextrema(arrayRear, np.less_equal)[0])
# [0 1 3 4 5]
print(signal.argrelextrema(arrayRear, np.less_equal, order=2)[0])
# [0 3 4 5]