我试图通过使用内存映射数组来处理应用程序中的内存问题。但是,作为计算的一部分,我需要将数组中的一些值设置为0。不幸的是,数组掩码需要额外的内存。有没有办法做到以下几点,使面罩处理得干净?在
source_array = numpy.memmap(filename, dtype='float32', mode='w+', shape=shape)
#Load data into memory mapped numpy array
band.ReadAsArray(buf_obj = source_array)
#set values == 255 to 0
numpy.putmask(source_array, source_array >= 255.0, 0.0)
我相信带有source_array >= 255.0
的最后一行必须在内存中形成一个大数组,对吗?除了手动循环每个元素之外,是否有一种内存高效的机制可以将source_array
中的所有255个值设置为0?在
抱歉,我意识到,当然memmapping-mask并不是一个最佳的解决方案。Numpy实际上并没有太多帮助以块的形式循环数组(这将是最干净的方式),尽管您当然可以手动执行。实际上,使用
numexpr
可能会取得一些成功,它总是分块计算以加速numpy,但我没有尝试过。在我想这不是你想要的:
您总是可以使用out参数来
ufunc
s和许多其他函数来要求numpy将结果直接存储到该数组中(通常也是为了节省内存)。这意味着,如果创建空内存映射数组,则可以执行以下操作:然后在
putmask
中使用mask
数组。这应该能解决问题。在相关问题 更多 >
编程相关推荐