比 numpy.less 更快?

Faster way than numpy.less?

我在考虑是否有比 np.less 功能更快的方法。 Atm 我正在用 np.less 比较两个数组得到类似 [true, true, false] 的东西,之后我用 a=np.where(x == True) 检查以获得 true 的位置.之后,我将通过列表检查值 [a] 的位置。在我看来,必须有一种更快的方法,但我目前找不到。无法对数组进行排序。

代码如下所示:

a = np.array([1, 2, 3])
b = np.array([2, 1, 8])
over = np.less(a, b)
# over = [True, False, True]
pos = np.where(over == True)[0]
# pos = [0, 2]
x = b[pos]
# x = [2,8]

一样,只需使用条件获取值即可。

import numpy as np

a = np.array([1, 2, 3])
b = np.array([2, 1, 8])

b[np.less(a, b)]
# array([2, 8])
list(b[np.less(a, b)])  # for a list result instead of np arr
# [2, 8]

# or just
b[a < b]
# array([2, 8])

问题不在于 np.less 的速度,而在于您的额外步骤。所有这些都 nearly-C-speed 快;只需要删除不必要的步骤。

即使您想将 True/False 结果保存在 over 中:

over = np.less(a, b)
b[over]
# array([2, 8])

over = a < b
b[over]
# array([2, 8])