Skip to main content
 首页 » 编程设计

python之系列的第一个元素在 numpy 中跨越阈值,处理永不跨越的系列

2025年05月04日32powertoolsteam

我有一个长度为 T 的 N 时间序列的 numpy 数组。我想要每个第一次超过某个阈值的索引,如果它从未超过,则为 -1 或类似的东西。取 ts_array = np.randn(N, T)

np.argmax(ts_array > cutoff, axis=1) 接近,但对于在时间 0 处超过阈值的时间序列和从未超过阈值的时间序列,它都返回 0。

np.where(...) 和 np.nonzero(...) 是可能的,但它们的返回值需要相当可怕的处理才能提取向量我感兴趣的

这个问题类似于Numpy first occurence of value greater than existing value但那里的答案都没有解决。

请您参考如下方法:

一个类轮:

(ts > c).argmax() if (ts > c).any() else -1 

假设 ts = ts_array 和 c = cutoff

否则:

使用argmax() 和any()

np.random.seed([3,1415]) 
 
def xover(ts, cut): 
    x = ts > cut 
    return x.argmax() if x.any() else -1 
 
ts_array = np.random.random(5).round(4) 

ts_array 看起来像:

print ts_array, '\n' 
 
[ 0.4449  0.4076  0.4601  0.4652  0.4627]  

各种检查:

print xover(ts_array, 0.400), '\n' 
 
0  
 
print xover(ts_array, 0.460), '\n' 
 
2  
 
print xover(ts_array, 0.465), '\n' 
 
3  
 
print xover(ts_array, 1.000), '\n' 
 
-1