Now that we have a basic understanding on how Cython works we can rewrite the
ParticleSimulator.evolve method. Thanks to Cython, we can convert our loops in C, thus removing the overhead introduced by the Python interpreter.
In Chapter 2, Fast Array Operations with Numpy, we wrote a fairly efficient version of the
evolve method using NumPy. We can rename the old version as
evolve_numpy to differentiate it from the new version:
def evolve_numpy(self, dt): timestep = 0.00001 nsteps = int(dt/timestep) r_i = np.array([[p.x, p.y] for p in self.particles]) ang_speed_i = np.array([p.ang_speed for pin self.particles]) v_i = np.empty_like(r_i) for i in range(nsteps): norm_i = np.sqrt((r_i ** 2).sum(axis=1)) v_i = r_i[:, [1, ...