我很好奇使用 numpy ufuncs与内置运算符与内置运算符的“函数”版本的好处和权衡。
我对所有 ufunc 都很好奇。也许有时有些比其他的更有用。但是,<
为了简单起见,我将使用我的示例。
有几种方法可以通过单个数字“过滤”一个 numpy 数组以获得一个布尔数组。每种形式都给出相同的结果,但是是否有首选的时间/地点来使用其中的一种?这个例子我将一个数组与一个数字进行比较,所以所有 3 都可以工作。
考虑使用以下数组的所有示例:
>>> x = numpy.arange(0, 10000)
>>> x
array([ 0, 1, 2, ..., 9997, 9998, 9999])
'<' 运算符
>>> x < 5000
array([ True, True, True, ..., False, False, False], dtype=bool)
>>> %timeit x < 5000
100000 loops, best of 3: 15.3 us per loop
运算符.lt
>>> import operator
>>> operator.lt(x, 5000)
array([ True, True, True, ..., False, False, False], dtype=bool)
>>> %timeit operator.lt(x, 5000)
100000 loops, best of 3: 15.3 us per loop
numpy.less
>>> numpy.less(x, 5000)
array([ True, True, True, ..., False, False, False], dtype=bool)
>>> %timeit numpy.less(x, 5000)
100000 loops, best of 3: 15 us per loop
请注意,它们都实现了几乎相同的性能和完全相同的结果。我猜所有这些调用实际上最终都在同一个函数中,因为<
它们operator.lt
都映射到__lt__
一个 numpy 数组,这可能是使用numpy.less
或等效实现的?
那么,哪个更“惯用”和“首选”?