如何最高效将无分隔符01矩阵文件加载为Numpy数组
01无分隔符矩阵文件转Numpy数组高效方案
首先明确结论:绝大多数场景下完全不需要使用生成器,原生文件读取+Numpy数组构造的效率更高,只有处理远超设备可用内存的超大文件时,才需要考虑生成器方案。
常规场景(文件小于可用内存)
GB级以内的文件都可以用这个方案,代码简洁性能强,处理你给出的示例文件耗时在毫秒级:
import numpy as np with open("你的矩阵文件路径.txt", "r") as f: # 逐行处理后直接构造数组,指定int8类型大幅节省内存 arr = np.array([list(line.strip()) for line in f], dtype=np.int8)
如果要进一步优化性能,还可以用一次性读取全量内容的方案,减少IO次数:
import numpy as np with open("你的矩阵文件路径.txt", "r") as f: lines = f.read().splitlines() col_count = len(lines[0]) # 所有内容拼接为单个字符串后直接转数组,避免逐行迭代开销 arr = np.fromiter(''.join(lines), dtype=np.int8).reshape(-1, col_count)
两种方案输出的结果都完全符合你要求的二维矩阵格式。
超大文件场景(文件超过可用内存)
这时候才需要用生成器逐行读取,避免一次性加载全量内容导致内存溢出:
import numpy as np def read_matrix_line(file_path): with open(file_path, "r") as f: for line in f: yield list(line.strip()) arr = np.array(list(read_matrix_line("超大矩阵文件路径.txt")), dtype=np.int8)
如果是几十GB级的极端大文件,还可以搭配Numpy的memmap做内存映射处理,进一步降低内存占用。
内容的提问来源于stack exchange,提问作者mikazz
相关产品推荐
相关产品推荐

