optimizations (bigger block size, more numpy functions) - still really slow, but only half as slow ;)