我有一个关于在numpy数组中找到最大值或更精确的不连续性的问题?我的示例数据如下所示
a = np.array([3,4,5,8,7,6,5,4,1])一般来说,我对数据中的每一个最大值/跳跃都很感兴趣。对于数组a,我希望检测8,因为它是最大值(左侧递增数字,右侧递减数字)和值4,因为数据在该值之后下降。到目前为止,我已经使用scipy.signal.argrelextrema和np.greater来检测最大值,但我无法检测到这些跳跃/不连续。对于我正在查看的数据,只有朝向较小值的跳跃才会发生,而不是相反。有没有一种简单的方法来检测这些跳跃?
发布于 2020-11-20 20:41:53
让我们试试这个:
threshold = 1
a = np.array([3, 4, 5, 8, 7, 6, 5, 4, 1])
discontinuities_idx = np.where(abs(np.diff(a))>threshold)[0] + 1np.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.diff kwargs),这取决于您需要位于不连续的哪一侧。
>>> discontinuities_idx
>>> array([3, 8])
>>> a[discontinuities_idx]
>>> array([8, 1])发布于 2020-11-20 20:45:47
您可以尝试这样做:
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)发布于 2020-11-20 21:34:42
这听起来像是数学分析,你需要定义一些条件,比如a'(x)>0或a'(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)它返回满足最大值的项目的索引。
https://stackoverflow.com/questions/64929443
复制相似问题