我有一个与在numpy
数组中查找最大值或更精确的不连续性相关的问题?我的示例数据看起来像这样
a = np.array([3,4,5,8,7,6,5,4,1])
一般来说,我对数据中的每个最大值 / 跳跃都感兴趣。对于 arraya
,我想检测 8,因为它是最大值 (左侧的增长数字和右侧的递减数字) 和 4 的值,因为数据在该值之后下降。到目前为止,我已经使用scipy.signal.argrelextrema
与np.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.diff
kwargs),具体取决于您需要的不连续性。
>>> discontinuities_idx
>>> array([3, 8])
>>> a[discontinuities_idx]
>>> array([8, 1])
这听起来像数学数学分析,你需要定义一些条件,如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)
它返回满足最大值的项目的索引。
您可以尝试以下操作:
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)
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(76条)