I was once again a bit hasty in my conclusion. The actual issue is in that I did not fully understand how islice works. islice takes the underlying generator and iterates it to the start index you give it without returning anything. Only after it has done that will it start actually yielding elements of the array. Naturally for large arrays this is extremely inefficient, hence the long wait times I experienced at startup. The solution was to modify the storage backend (zarr) to enable its built-in iteration to start at a custom index. I’ve submitted a pull request 26 that should get released with the next minor release of zarr.