Python/NumPy中三个“all”方法有什么区别?性能差异的原因是什么? ndarray.all()总是三者中最快的是真的吗?NumPy ndarray.all()与np.all(ndarray)vs all(ndarray)
这里是我跑一个计时测试:
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
Python'all'在'a'上迭代。 all(a)','all(iter(a))','all(list(a))','all(a.tolist())'大致相同。但'全部'可能会短路。设置'a [2] = False'并且看到截然不同的时间。 – hpaulj
'np.all'也短路,不是吗? 'all(a.tolist())'比我的电脑上的all(a)'快得多(2-3倍)。这主要是因为'tolist'方法被优化用于将数组作为python对象列表进行封装。 – MSeifert