Why are variable assignments faster than calling from arrays in python?

  arrays, python, variables

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) 
# Individual variable assignment math     
def test2(coords):
    results = []
    for point in coords:
        z, y, x = 1, 1, 1
        z = (point[0] - z)**2
        y = (point[1] - y)**2
        x = (point[2] - x)**2
        mins = sqrt(z + y + x)
a = np.random.randint(0, 10, (500000,3))

t = time.perf_counter()
print ("Test 1 speed:", time.perf_counter() - t)

t = time.perf_counter()
print ("Test 2 speed:", time.perf_counter() - t)
  • Test 1 speed: 3.261552719 s
  • Test 2 speed: 0.716983475 s

Source: Python Questions