Calling the `numpy` indexing methods have some overhead (it does checks, and needs to create a new array). Iterating directly in C is faster; the opposite is the case in Python (not Cython) code because Python loops are slow and the overhead in calling numpy is less than the time taken to do the loop in the vectorized numpy implementation.