我正在处理非常大的图像数组,其中包含
我的初始方法会导致
uint16
数据,我希望将其降采样并转换为uint8
。我的初始方法会导致
MemoryError
,因为中间需要使用float64
数组:img = numpy.ones((29632, 60810, 3), dtype=numpy.uint16)
if img.dtype == numpy.uint16:
multiplier = numpy.iinfo(numpy.uint8).max / numpy.iinfo(numpy.uint16).max
img = (img * multiplier).astype(numpy.uint8, order="C")
然后我尝试了原地进行乘法,具体操作如下:
if img.dtype == numpy.uint16:
multiplier = numpy.iinfo(numpy.uint8).max / numpy.iinfo(numpy.uint16).max
img *= multiplier
img = img.astype(numpy.uint8, order="C")
但是我遇到了以下错误:
TypeError: 无法将dtype('float64')的ufunc乘法输出转换为dtype('uint16'),使用强制规则'same_kind'
你知道有什么方法可以在最小化内存占用的情况下执行此操作吗?
我在哪里可以更改错误消息中提到的强制规则?