我有一个包含浮点值的np.array和一个(True/False)标记的掩码,我想计算由“True”标记的数组中数据与下一位数据之间的差值。如果差值小于我定义的阈值600,则下一位数据也应该在掩码中标记为“True”。这个用例适用于连续出现的两个异常值的情况,因为我的算法基于梯度,目前对于这种情况无法正常工作。
例如:
x = np.array([1.5, 16000, 16100, 2.5, np.nan, 3.1, 3.4, -15000, 4.1, np.nan])
mask = np.array([False, True, False, False, False, False, False, True, False, False])
threshold = 600
在这个例子中,我们需要进行如下计算:
abs(16000)-abs(16100) = 100
100 < threshold = True
以及
abs(-15000)-4.1=14995.9
14995.9 > threshold=True
输出应为:
mask_new = np.array([False, True, True, False, False, False, False, True, False, False])
还需考虑的是,下一位数据可能有时是"NaN",在这种情况下掩码应保持"False"。连续的“True”最多可能出现5个。
我曾考虑使用np.where函数,但不知道如何在np.where函数内部计算与下一位数据的差值。
有谁能帮我解决这个问题吗?