gpt4 book ai didi

python - NumPy ndarray.all() vs np.all(ndarray) vs all(ndarray)

转载 作者:太空狗 更新时间:2023-10-29 21:41:50 26 4
gpt4 key购买 nike

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.allall 的区别比较复杂。

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

请注意,时间还取决于您的a 的类型。如果你处理一个 python 列表 all 对于相对较短的列表来说会更快。如果你处理一个数组,np.alla.all() 在几乎所有情况下都会更快(除了 object 数组,但我不会走那条路,那条路是疯狂的)。

关于python - NumPy ndarray.all() vs np.all(ndarray) vs all(ndarray),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43382237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com