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
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to