Reduce memory requirements for saving
Currently, saving takes a potentially large amount of memory because we store an empty cube of the shape of the final result, initially. This is done by allocating and zeroing a numpy array of the equivalent size. This unnecessary and excessive memory use should be avoided.