Subsample perf

NOT READY FOR MERGE

Addresses #531 partially. This change resulted in ~10% reduction in runtime. I'm currently unable to profile the cython code for whatever reason, so going about optimization blind. Would be good to squeeze out more. 


oh, good call. That should just floor though:

```python
> array([1.0, 2.5, 3.923]).astype(int32)
Out[21]: array([1, 2, 3], dtype=int32)
```