【发布时间】:2016-12-06 06:46:57
【问题描述】:
我有一个 300MB 的 ascii 文件,其中包含 9 列数据(制表符分隔、字符串和数字)。下面给出一个示例行:
11204226 736539.402697000 192.168.0.104 10.0324 0 1.1313 3.543 3 9
文件结构良好,不应存在空行或错误行。整个文件的格式保持不变。
当我尝试在 Ubuntu 14.04 中加载(导入数据)文件时。 LTS,6GB RAM,Matlab 2015b 系统只是冻结。我的同事成功地将文件加载到 Windows 7、8GB RAM、Matlab 2014b 中。
然而,计划是将数据保存在 .mat 文件中,他也不能这样做。创建了一个文件,但文件大小增加到 1GB 以上,而且没有任何结束的迹象。
我尝试通过图形界面或以下代码加载数据:
tdata = importdata('data.dat');
也曾尝试通过图形界面保存 .mat 文件。
我认为 300MB 的文件不应该构成这样的挑战。
您会选择哪种方法来处理文件?
我希望 .mat 文件比普通的 ascii 文件小。
此外,我的计划是避免将原始文件分成小块。
更新:
我的同事能够加载数据,将结构中的所有字符串条目转换为数字。这是前三列。除了由 IP 地址组成的第三列之外,我不确定为什么将它们作为字符串导入。拥有一个全数字矩阵,可以存储数据,生成的 .mat 文件大小为 15MB。不知何故,字符串和数字的混合搞砸了一切。还是不知道为什么。
【问题讨论】:
-
好吧,文件大小应该不是问题——我之前已经加载了超过 10GB 的文件,即使 RAM 无法容纳它——Matlab 无论如何都会缓存它。我假设的问题可能是您的代码 - 所以请编辑您的问题并提出来。
-
大多数“自动”导入例程在第 3 列会遇到困难或阻塞(IP 地址,4 个数字用 3
.分隔,不符合任何“数字”标准)。当它们具有不同类型的字段/列时,我建议使用textscan导入您的数据。