Python / NumPy中的三个“全部”方法有什么区别?性能差异的原因是什么?ndarray.all()始终是三个中最快的吗?
这是我运行的计时测试:
In [59]: a = np.full(100000, True, dtype=bool)
In [60]: timeit a.all()
The slowest run took 5.40 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 5.24 µs per loop
In [61]: timeit all(a)
1000 loops, best of 3: 1.34 ms per loop
In [62]: timeit np.all(a)
The slowest run took 5.54 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 6.41 µs per loop
np.all(a)
和之间的区别a.all()
很简单:
a
是,numpy.array
则np.all()
只需致电a.all()
。a
不是,numpy.array
则np.all()
调用会将其转换为numpy.array
,然后调用a.all()
。a.all()
另一方面会因为a
不是numpy.array
而失败,因此可能没有all
方法。np.all
和之间的区别all
更加复杂。
all
功能适用于任何可迭代(包括list
,set
s和generators
,...)。np.all
仅适用于numpy.array
s(包括可以转换为numpy数组的所有内容,即list
s和tuple
s)。np.all
处理array
具有指定数据类型的,这使得比较时非常有效!= 0
。all
但是需要评估bool
每个项目,这要慢得多。np.all
不需要进行这种转换。请注意,时间安排还取决于您的类型a
。如果您处理python列表all
,则相对较短的列表会更快。如果您处理数组,np.all
并且a.all()
在几乎所有情况下都会更快(也许object
数组除外,但我不会走这条路,这就是疯狂)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句