我有一个大的(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
参数。