Python:在numpy数组中查找最大值和不连续性



我有一个问题与在numpy阵列中查找最大值或更精确的不连续性有关?例如,我的示例数据看起来像这个

a = np.array([3,4,5,8,7,6,5,4,1])

总的来说,我对数据中的每一个最大值/跳跃都感兴趣。对于数组a,我想检测8,因为它是一个最大值(左边是递增的数字,右边是递减的数字(和值4,因为数据在这个值之后会下降。到目前为止,我一直使用scipy.signal.argrelextremanp.greater来检测最大值,但我不能检测这些跳跃/不连续性。对于我正在查看的数据,只有向较小值的跳跃才能发生,而不是相反。有没有一种简单的蟒蛇方法可以检测到这些跳跃?

让我们试试这个:

threshold = 1
a = np.array([3, 4, 5, 8, 7, 6, 5, 4, 1])
discontinuities_idx = np.where(abs(np.diff(a))>threshold)[0] + 1

np.diff(a)给出了a:的每个分量之间的差异

>>> array([ 1,  1,  3, -1, -1, -1, -1, -3])

从那时起,应用np.where(abs(np.diff(a))>threshold)[0]来找出检测到的不连续性在哪里(在绝对差方面高于用户指定的threshold(。最后,如果需要,您可以添加+1来补偿n=1差异idx(请参见np.diffkwargs(,这取决于您需要处于不连续性的哪一侧。

>>> discontinuities_idx
>>> array([3, 8])
>>> a[discontinuities_idx]
>>> array([8, 1])

这听起来像是数学分析,需要定义一些条件,如a'(x)>0a'(x)<0。所以你可以屏蔽它们:

a = np.array([3,4,5,8,7,8,6,5,4,9,2,9,9,7])
mask1 = np.diff(a) > 0
mask2 = np.diff(a) < 0
>>> np.flatnonzero(mask1[:-1] & mask2[1:]) + 1
array([3, 5, 9], dtype=int64)

它返回满足最大值的项目的索引。

你可以试试这个:

import numpy as np
import math
a = np.array([3,4,5,8,7,6,5,4,1])
MaxJump = np.diff(a)
print(MaxJump)
print(len(MaxJump))
MaxJump1 = []
for i in range (len(MaxJump)):
MaxJump1.append(math.fabs(MaxJump[i]))
print(MaxJump1)
MaxJump3 = np.max(MaxJump1)
print(MaxJump3)

最新更新