I’ve been working on optimizing some Euclidean distance transform calculations for a program that I’m building. To preface, I have little formal training in computer science other than some MOOCs I’ve been taking.
I’ve learned through empirical testing in Python that assigning values to individual variables and performing operations on them is faster than performing operations on arrays. Is this observation reproducible for others?
If so, could someone provide a deeper explanation as to why there are such speed differences between these two forms of syntax?
Please see some example code below.
import numpy as np from math import sqrt import time # Numpy array math def test1(coords): results =  for coord in coords: mins = np.array([1,1,1]) # The three lines below seem faster than np.linalg.norm() mins = (coord - mins)**2 mins = np.sum(mins) results.append(sqrt(mins)) # Individual variable assignment math def test2(coords): results =  for point in coords: z, y, x = 1, 1, 1 z = (point - z)**2 y = (point - y)**2 x = (point - x)**2 mins = sqrt(z + y + x) results.append(mins) a = np.random.randint(0, 10, (500000,3)) t = time.perf_counter() test1(a) print ("Test 1 speed:", time.perf_counter() - t) t = time.perf_counter() test2(a) print ("Test 2 speed:", time.perf_counter() - t)
- Test 1 speed: 3.261552719 s
- Test 2 speed: 0.716983475 s
Source: Python Questions