python - 无需加载多个 .npy 文件即可获取向量的长度

标签 python file numpy

我有大约 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/

相关文章:

python - QT 样式表不产生任何结果

javascript - 打开一个 csv 文件并将值转换为 javascript 数组

c - 文本文件统计信息以及显示它们的问题

pandas - 查找文档中存在的属性 `feature_names_in_` 时出错

python cx_Freeze egg问题

python - 在Python中将三角形区域从一张图片复制到另一张图片

python - 如何获得 numpy 中对角线下的值总和?

相当于 R 函数 sweep() 的 Python numpy 或 pandas

python - Keras 中 Adam 优化器的衰减参数

C程序不计算文本文件中的字母频率