通過使用生成器理解而不是列表理解,可以使這兩個函數更快、更具可比性。在s = """
import numpy as np;
x, y = np.random.rand(1000),np.random.rand(1000);
(all((x[i], y[i])) for i in range(1000)) """
timeit.timeit(s,number=1000)
0.05593514442443848
s_yours = """
import numpy as np;
x, y = np.random.rand(1000), np.random.rand(1000);
[all((x[i], y[i])) for i in range(1000)] """
timeit.timeit(s_yours,number=1000)
0.3829691410064697
s_numpy = """import numpy as np;
x, y = np.random.rand(1000), np.random.rand(1000);
(np.all((x[i], y[i])) for i in range(1000))"""
timeit.timeit(s_numpy,number=1000)
0.06155896186828613
s_your_numpy = """import numpy as np;
x, y = np.random.rand(1000), np.random.rand(1000);
[np.all((x[i], y[i])) for i in range(1000)]"""
timeit.timeit(s_your_numpy,number=1000)
12.162676811218262
Numpy可能還是比較慢的,但是就像那個家伙說的,在更大的列表中效果更好。在
還有,為什么
^{pr2}$
沒有選擇?在