I would remove all Cython code for now. Let's have a usable module first, and consider optimizations only later, if it is really needed. But since imputation should be done only once or twice in a typical machine learning workflow, I don't think it is worth trading readability/maintainability for a 1-3x speedup (of something which already takes less than a second). What is your opinion @mblondel ?