import matplotlib.pyplot as plt
import numpy as np
dat= np.linspace(1, 5, 5)
dat2 = np.concatenate([dat, dat[::-1]+.5, dat,dat[::-1]])
## ignore above.
res = np.diff(np.sign(np.diff(dat2, prepend=[0])), append=0)
plt.plot(dat2) ## NB end conditions, and you can ignore plotting
plt.plot(res)
3条答案
按热度按时间mutmk8jj1#
你只是指最大过滤器吗?如果是,请查看scipy.ndimage.maximum_filter1d
举个简单的例子:
这将产生:
ff29svar2#
我假设你的数据不是周期性的。让我给予你一个伪代码,希望这就足够了。
--对数据进行比较
--你在寻找diff中的符号变化。对于Max来说,这将是从正到负的变化;零是一种特殊情况。numpy.sign()为负值、零值和正值提供了-1、0、1中每个值的符号。
--您可以再次求差--您正在寻找-2和-1,或者最小抑制2和1。请正确处理边界。
祝你好运,E
干杯,E
ev7lccsx3#
如果您的输入数据是变量“signal”,那么您需要的结果可以由下式给出:
(使用Numpy函数)