參考以下程式:
import numpy as np
rand = np.random.RandomState(360)
x = rand.randint(100, size=10)
print(x)
evenmask=(x%2==0)
print(evenmask)
print(x[evenmask])
輸出:
[64 61 60 66 99 8 34 95 6 91]
[ True False True True False True True False True False]
[64 60 66 8 34 6]
其實這是python設計上的特點:能不用迴圈就不用迴圈
WHY? 因為可以提升程式執行效率!!
比較如下:
一、使用numpy的fancy index與array masking,不使用迴圈:
程式:
%%timeit
rand = np.random.RandomState(360)
x = rand.randint(100, size=1000)
y=x[x%2==0]
時間計算結果:
155 µs ± 3.02 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
二、使用list與迴圈:
程式:
%%timeit
rand = np.random.RandomState(360)
x = rand.randint(100, size=1000)
y=[]
for num in list(x):
if num%2==0:
y.append(num)
時間計算結果:
416 µs ± 9.12 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
所耗費時間是原本的2.68倍