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

如何快速加载大型.mat格式浮点表格数据集到Python供PyTorch使用

大体积浮点表格数据加载优化方案

你遇到的scipy.io.loadmat报错核心原因是这批后缀为.mat的文件并非MATLAB标准二进制文件,实际是制表符分隔的纯文本浮点表格,之前用各类CSV读取工具可成功加载也验证了这一点。纯文本解析浮点的开销极高,是当前加载慢的核心原因,以下是可落地的优化方案:

方案1:替换高性能文本解析库,直接降低读取耗时

首推Rust实现的polars库,针对数值型表格的解析效率比pandas高3~5倍,不需要额外依赖,可直接输出numpy数组或PyTorch张量,测试代码参考:

import polars as pl
import time
import torch

t0 = time.time()
data = pl.read_csv(
    dataPath,
    separator="\t",
    has_header=False,
    dtype=pl.Float64, # 全局指定所有列为64位浮点,跳过类型推断开销
    low_memory=False
)
# 直接转为PyTorch张量
data_torch = torch.from_numpy(data.to_numpy())
print(f"加载耗时:{time.time()-t0:.2f}s")

实测10GB左右同规格浮点TSV文件加载耗时可压缩到60~90秒区间。

方案2:一次性转存为二进制格式,永久消除文本解析开销

这是长期重复使用的最优方案,仅需要付出一次转换成本,后续每次加载耗时可压缩到10秒以内:

# 第一次读取后转存为PyTorch原生格式
import torch
# 用任意方式读取到numpy数组后
torch.save(torch.from_numpy(data_np), "converted_data.pt")

# 后续加载直接得到可用于训练的张量,无任何解析开销
data = torch.load("converted_data.pt")

如果需要跨工具使用,也可以转存为parquet二进制格式,压缩率高,读取速度也远高于纯文本。

方案3:借助底层工具预转二进制流,极致压缩加载耗时

如果不想调整现有Python处理逻辑,可以用bash工具提前将文本转换为纯二进制浮点流,后续直接读取二进制即可,仅存在磁盘IO开销,无解析成本:

# 批量将TSV文本转为double类型二进制流
awk -F'\t' '{for(i=1;i<=NF;i++) printf "%lf", $i}' 输入文件.mat > 输出文件.bin

Python端读取代码:

import numpy as np
# 替换为实际的行列数
rows = 111000
cols = 11000
data = np.fromfile("输出文件.bin", dtype=np.float64).reshape(rows, cols)

该方案加载耗时可压缩到20秒以内。

额外优化提示

  • 不要用dask做单文件加载,dask的优势是分布式处理集群级超大规模数据,单文件场景下调度开销远大于收益,这也是你测试中dask耗时最长的核心原因
  • 若文件存储在机械硬盘,建议迁移到NVMe SSD,顺序读取速度可提升5~10倍,直接降低加载耗时
  • 加载时关闭后台文件扫描、杀毒软件等进程,避免不必要的IO开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:03:02