You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

numpy.genfromtxt是否会一次性读取文件全部内容?大文件内存优化咨询

关于numpy.genfromtxt()读取大文件的内存问题及替代方案

numpy.genfromtxt()的内存行为

numpy.genfromtxt()会一次性读取整个文件的全部内容并加载到内存中。因为它的设计目标是生成完整的numpy数组,必须将所有数据读入后完成解析、类型转换等操作,最终生成一个内存中的数组对象。对于6300万行的超大型文件,这种方式必然会占用大量内存,甚至可能触发内存不足的错误。

逐行/分块读取的替代方法

1. Python原生逐行读取+单行numpy处理

利用Python文件对象的迭代器特性,每次仅读取一行数据并处理,内存仅保留单行数据的占用:

import numpy as np

with open("large.file.txt", "r") as f:
    for line in f:
        # 去除首尾空白并分割数据,转换为numpy数组
        row_data = np.fromstring(line.strip(), sep=" ")
        # 在这里执行你的业务逻辑,比如计算、写入结果等

2. numpy.loadtxt()分块读取

使用numpy.loadtxt()的skiprows和max_rows参数,将文件分成固定大小的块逐批处理,内存占用由块大小决定:

import numpy as np

chunk_size = 10000  # 可根据内存情况调整块大小
current_skip = 0

while True:
    # 读取当前块
    chunk = np.loadtxt("large.file.txt", skiprows=current_skip, max_rows=chunk_size)
    # 若块为空,说明已读完所有数据
    if chunk.size == 0:
        break
    # 处理当前块数据
    # ...
    # 更新跳过的行数
    current_skip += chunk_size

3. pandas分块读取(适合结构化数据)

如果你的文件是结构化数据,pandas.read_csv()的chunksize参数提供了更便捷的分块处理方式,处理后可转换为numpy数组:

import pandas as pd
import numpy as np

chunk_size = 10000
# sep参数根据你的文件分隔符调整,header=None表示无表头
for chunk in pd.read_csv("large.file.txt", sep=" ", chunksize=chunk_size, header=None):
    # 将pandas DataFrame转换为numpy数组
    chunk_np = chunk.to_numpy()
    # 处理当前块数据
    # ...

内容的提问来源于stack exchange,提问作者Redshoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 09:56:05