I think something like this. It is possible it won't be more efficient, but I can see there being a reasonable chance it'll be better as its a single slice on `h5_data` with a single memory allocation vs. many slices on `h5_data` with many memory allocations. What do you think, @josenavas?

```python
indptr_indices = np.hstack([arange(h5_indptr[i], h5_indptr[i+1]) for i in keep])
data = h5_data[indptr_indices]
indices = h5_data[indptr_indices]
```

...going slightly further, it should be possible to determine the size of `indptr_indices` with a pass over `h5_indptr` too, but that is a much smaller structure (though the many memory allocs is still a concern)