我有一个长度为 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
我是一名优秀的程序员,十分优秀!