Python numpy将数字转换为字节

Python numpy将数字转换为字节,python,numpy,rounding,Python,Numpy,Rounding,我有一个numpy矩阵,浮点数大多在0-255之间。但是,有些数字有点超出范围(如-5.36270) 我想将矩阵转换为numpy.uint8类型,因此0-255范围内的数字可以向上或向下取整为闭合整数(这无关紧要),但是小于0的数字应该是0,大于255的数字应该是255 您是如何做到这一点的?您可以使用: a = np.arange(10) np.clip(a, 1, 8) > array([1, 1, 2, 3, 4, 5, 6, 7, 8, 8]) 将执行第一步:剪裁到所需范围 之后

我有一个numpy矩阵,浮点数大多在0-255之间。但是,有些数字有点超出范围(如-5.36270)

我想将矩阵转换为
numpy.uint8
类型,因此0-255范围内的数字可以向上或向下取整为闭合整数(这无关紧要),但是小于0的数字应该是0,大于255的数字应该是255

您是如何做到这一点的?

您可以使用:

a = np.arange(10)
np.clip(a, 1, 8)
> array([1, 1, 2, 3, 4, 5, 6, 7, 8, 8])
将执行第一步:剪裁到所需范围

之后,您可以使用将所有数字截断为
uint8
数组:

result = np.clip(x, 0, 255).astype(np.uint8)
更好的方法可能是使用
clip
out
参数一次完成所有截断。在这种情况下,您必须显式地预先分配输出缓冲区:

result = np.empty_like(x, dtype=np.uint8)
np.clip(x, 0, 255, out=result)

可能是@ALee的副本。另一个问题可以被认为是这个问题的重复,但反之亦然。OP要求的是转换,而不仅仅是剪辑操作。这里发布的第一个答案不完整。@ALee。我已经先发制人地敲打了另一个。