通过 numpy memmap 访问的值的总和是错误的



我有一个大的(9.3 GB(.npy文件,其中包含(67000,9,128,128(ndarray中的uint8值。我使用 np.save() 创建了它,当使用 x = np.memmap('file.npy', "uint8", shape=(67000, 9, 128, 128), mode="r") 加载它时,np.sum(x[0,0,:,0])返回 13783。"问题"是,当我尝试用np.load("file.npy")加载它并运行相同的函数时,我得到的总和为 13768。

由于np.load()将整个文件加载到内存中,因此我假设在其 ndarray 上计算的总和是正确的,而加载 memmap 的 ndarray 返回的总和是错误的,但为什么它们不同?如果是读取错误,总和应该真的偏离,那么为什么它只差 15 ??!

我不知道为什么会这样。这不会影响我的计算,但对于其他任务来说可能很重要。

numpy.memmap用于

将文件中的原始数据视为 numpy 数组。 您的文件名是 'file.npy' ,因此这不是"原始"数据。 它是一个NPY文件,它有一个标题,其中包含有关存储在其中的数组的元信息。

要对 NPY 文件进行内存映射,请使用 numpy.load()mmap_mode 参数。

最新更新