比 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])
我在考虑是否有比 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])