NumPy ndarray.all()与np.all(ndarray)与all(ndarray)

dkv

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.arraynp.all()只需致电a.all()
  • 如果a不是,numpy.arraynp.all()调用会将其转换为numpy.array,然后调用a.all()a.all()另一方面会因为a不是numpy.array失败,因此可能没有all方法。

np.all之间的区别all更加复杂。

  • all功能适用于任何可迭代(包括listsets和generators,...)。np.all仅适用于numpy.arrays(包括可以转换为numpy数组的所有内容,即lists和tuples)。
  • np.all处理array具有指定数据类型的,这使得比较时非常有效!= 0all但是需要评估bool每个项目,这要慢得多。
  • 使用python函数处理数组非常慢,因为数组中的每个项目都需要转换为python对象。np.all不需要进行这种转换。

请注意,时间安排还取决于您的类型a如果您处理python列表all,则相对较短的列表会更快。如果您处理数组,np.all并且a.all()在几乎所有情况下都会更快(也许object数组除外,但我不会走这条路,这就是疯狂)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章