Lorsqu'il y a des vecteurs à n dimensions w et x, il est inefficace si l'instruction for est utilisée pour calculer $ z = w_1x_1 + w_2x_2 ... w_nx_n $. Lorsqu'il est vectorisé, il peut être calculé efficacement en définissant $ z = w ^ Tx + b $. En Python, vous pouvez comparer avec le code suivant.
import numpy as np
import time
a = np.random.rand(1000000)
b = np.random.rand(1000000)
tic = time.time()
c = np.dot(a, b)
toc = time.time()
print(f'{"Vectrized version":20}:{str(1000 * (toc-tic))} ms')
c = 0
tic = time.time()
for i in range(1000000):
c += a[i] * b[i]
toc = time.time()
print(f'{"For loop":20}:{str(1000 * (toc-tic))} ms')
Vectrized version :3.9501190185546875 ms
For loop :1007.7228546142578 ms
Supposons que vous souhaitiez effectuer une opération exponentielle sur un vecteur de dimension 1000000 $ v $.
import numpy as np
import time
import math
v = np.random.rand(1000000)
u = np.zeros((1000000, 1))
tic = time.time()
u = np.exp(v)
toc = time.time()
print(f'{"Vectrized version":20}:{str(1000 * (toc-tic))} ms')
c = 0
tic = time.time()
for i in range(1000000):
u[i] = math.exp(v[i])
toc = time.time()
print(f'{"For loop":20}:{str(1000 * (toc-tic))} ms')
Vectrized version :3.992319107055664 ms
For loop :857.1090698242188 ms
Il y a une différence d'environ 300 fois entre la version vectorisée et la version non vectorisée. Quand je veux utiliser for-loop, je veux penser à un moyen d'éviter de l'utiliser.
Recommended Posts