我有大约 2000 个 .npy 文件,每个文件代表一个一维 float 向量,其中包含 100,000 到 1,000,000 个条目(这两个数字将来都会大幅增长)。对于每个文件,我想要它包含的向量的长度。以下选项是可能的,但很耗时:
lengths = [numpy.shape(numpy.load(whatever))[0] 对于 os.listdir(some_dir) 中的任何内容]
问题: 导出该向量长度列表的最有效/最快的方法是什么?当然,我应该能够直接根据文件大小进行工作,但是最好的方法是什么?
最佳答案
使用内存映射文件将大大加快速度。 通过内存映射文件,numpy 仅加载 header 以获取数组形状和数据类型,而实际数组数据则保留在磁盘上直到需要时为止。
import numpy as np
# Load files using memmap
data = [np.load(f, mmap_mode='r')) for f in os.listdir(some_dir)]
# Checking your assumptions never hurts
assert (d.ndim == 1 for d in data).all()
lengths = [d.shape[0] for d in data]
编辑 您需要加载文件头而不是直接使用文件大小的原因是 npy
文件的 header 不一定是固定长度。尽管对于没有字段或字段名的一维数组,它可能不会改变(请参阅 https://www.numpy.org/devdocs/reference/generated/numpy.lib.format.html )。
关于python - 无需加载多个 .npy 文件即可获取向量的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52889798/