I think it is a not so infrequent requirement to do castings from float types 
to integer types of from float types to lower precision float types where it is 
OK to have a loss of precision, but you want to be sure not to get values that 
are completely unrelated to the input ones because of wrapping effects.

A typical application can be in sound/image processing, where you do filtering 
with floating point, but then you want to go back to integer types for the 
final result and if you have values too large for the integer type, then you 
want the values to saturate to the maximum ones and not certainly a positive 
value to become negative because of wrapping.  Missing the clipping step in 
some cases can even be dangerous (e.g. resulting in sound signals that once 
played through a headset can get so loud to damage the hear).

As of today, I think that this conversion can only be done with 
`.clip(....).astype(...)`. However, this is a bit inconvenient: on one hand, 
for the clip step you need to have the minimum and maximum values, which could 
be automatically determined from the type you want (but clip knows nothing 
about it yet). Secondly, this method concatenation creates temporary copies 
that would be unneeded if the operation could be done in just one step.

Ideally, I'd like to be able to write `a.astype(np.int16, casting=`clip`).
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to