A crisp mock example:
import numpy as np
import numba as nb
from numba.experimental import jitclass
spec = [
('array', nb.float64[:, :])
]
@jitclass(spec)
class A2D:
def __init__(self, input_array):
self.array = np.asarray(input_array, dtype=np.float64).reshape(-1, 2)
@property
def norm(self):
return np.sqrt(self.array[:, 0]**2 + self.array[:, 1]**2)
>>> a_np = np.random.random(size=(1000, 2))
>>> a_2d = A2D(a_np)
>>> %timeit a2_d.norm
2.19 µs ± 40.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
>>> from vectorized2d import Array2D
>>> arr_2d = Array2D(a_np)
>>> %timeit arr_2d.norm
2.55 µs ± 44.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
A crisp mock example: