It appears, generally speaking, that native Python << vectorized NumPy < naive Cython < Cython w/our old interface < MemoryViews <= Pointers. Pointers win if much slicing is done in MemoryViews, but if this is coded around MemoryViews can reach raw pointer-like speed. [This page has a good breakdown with benchmarks.](http://jakevdp.github.io/blog/2012/08/08/memoryview-benchmarks/)

Since this function already heavily uses pointers, I agree with keeping the current pointer-based implementation. We probably would get little benefit for significant effort attempting to move to MemoryViews.

New functions (and a lot of existing functions without pointer optimization) would reap near-transparent benefits, though.