相关疑难解决方法(0)

高效返回数组中第一个满足条件的值的索引

我需要找到满足条件的 1d NumPy 数组或 Pandas 数字系列中第一个值的索引。数组很大,索引可能靠近数组的开头结尾,或者根本不满足条件。我无法提前判断哪个更有可能。如果不满足条件,则返回值应为-1。我考虑了几种方法。

尝试 1

# func(arr) returns a Boolean array
idx = next(iter(np.where(func(arr))[0]), -1)
Run Code Online (Sandbox Code Playgroud)

但这通常太慢了,因为func(arr)整个数组上应用向量化函数而不是在满足条件时停止。具体来说,当条件在数组开始附近满足时,代价是昂贵的。

尝试 2

np.argmax稍微快一点,但无法识别何时从未满足条件:

np.random.seed(0)
arr = np.random.rand(10**7)

assert next(iter(np.where(arr > 0.999999)[0]), -1) == np.argmax(arr > 0.999999)

%timeit next(iter(np.where(arr > 0.999999)[0]), -1)  # 21.2 ms
%timeit np.argmax(arr > 0.999999)                    # 17.7 ms
Run Code Online (Sandbox Code Playgroud)

np.argmax(arr > 1.0)返回0,当条件,即一个实例并不满足。

尝试 3

# func(arr) returns a Boolean …
Run Code Online (Sandbox Code Playgroud)

python arrays performance numpy pandas

5
推荐指数
1
解决办法
2283
查看次数

标签 统计

arrays ×1

numpy ×1

pandas ×1

performance ×1

python ×1