gpt4 book ai didi

python - 我可以制作 numpy 内存映射掩码吗?

转载 作者:行者123 更新时间:2023-12-01 05:55:16 24 4
gpt4 key购买 nike

我正在尝试使用内存映射数组来处理应用程序中的内存问题。然而,作为计算的一部分,我需要将数组中的某些值设置为 0。不幸的是,数组掩码将需要额外的内存。有没有办法做到以下几点,使 mask 处理干净?

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?

最佳答案

抱歉,意识到对掩码进行内存映射当然不是最佳解决方案。 Numpy 实际上并没有太多帮助以 block 的形式循环遍历数组(这将是最干净的方式),尽管您当然可以手动执行此操作。实际上,您可能会在 numexpr 方面取得一些成功,它总是以 block 的形式进行计算以加速 numpy,但我没有尝试这样做。

<小时/>

我想这并不完全是你想要的:

您始终可以使用 ufunc 和许多其他函数的 out 参数来要求 numpy 将结果直接存储到该数组中(通常也可以节省内存)。这意味着如果您创建一个空的内存映射数组,您可以执行以下操作:

# You could use tempfile.NamedTemporaryFile. But I will leave that to you:
mask = np.memmap(tempfile, shape=source_array.shape, dtype=bool, mode='w+')
np.greater_equal(source_array, 255.0, out=mask)

然后在putmask中使用mask数组。这应该可以解决问题。

关于python - 我可以制作 numpy 内存映射掩码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12870072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com