Is it possible to downcast an array in-place?
For example:
x = np.random.random(10) # Placeholder for "real" data
x -= x.min()
x /= x.ptp() / 255
x = x.astype(np.uint8) <-- returns a copy
First off, a bit of background to the question... At the moment, I'm trying to downcast a large (>10GB) array of uint16's to uint8's. I have enough RAM to fit everything into memory, but I'd really prefer to use as few copies as possible....
In the particular case of a C-ordered uint16 array to uint8 on a little-endian system, I can do this:
# "x" is the big 3D array of uint16's
x -= x.min()
x /= x.ptp() / 255
x = x.view(np.uint8)[:, :, ::2]
That works, but a) produces a non-contiguous array, and b) is awfully case-specific.
Is there a way to do something similar to astype(), but have it "cannibalize" the memory of the original array? (e.g. the "out" argument in a ufunc?)
Hopefully my question makes some sense to someone other than myself...
Thanks!
-Joe