如何使用Numpy以性能化的方式计算第一个和最后一个元素的峰和谷?

dzhpxtsq  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(117)

我想在一个数组中找到波峰和波谷,我已经使用link实现了这个目标。但是,pv不包括第一个元素和最后一个元素。我该如何做呢?

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# example data with peaks:
x = np.linspace(-1,3,1000)
data = -0.1*np.cos(12*x)+ np.exp(-(1-x)**2)

#     ___ detection of local minimums and maximums ___

pv = np.diff(np.sign(np.diff(data))).nonzero()[0] + 1

4nkexdtk

4nkexdtk1#

以下是您可以执行此操作的方法:

import numpy as np
import matplotlib.pyplot as plt

# example data with peaks:
x = np.linspace(-1, 3, 1000)
data = -0.1 * np.cos(12 * x) + np.exp(-((1 - x) ** 2))

#     ___ detection of local minimums and maximums ___

pv = np.diff(np.sign(np.diff(data))).nonzero()[0] + 1
pv = np.concatenate(([0], pv, [len(x) - 1]))

plt.plot(x, data, c="black", zorder=1)
plt.scatter(x[pv][::2], data[pv][::2], c="red", zorder=2)
plt.scatter(x[pv][1::2], data[pv][1::2], c="blue", zorder=3)
plt.show()

结果:

相关问题