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

时间:2018-04-18 20:48:41

标签: python numpy memory

我有一个大的(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 ??

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

1 个答案:

答案 0 :(得分:3)

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

要对NPY文件进行内存映射,请使用mmap_mode的{​​{1}}参数。