【问题标题】:Loading ASCII files in matlab and saving them as .mat在 matlab 中加载 ASCII 文件并将它们保存为 .mat
【发布时间】: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 导入您的数据。

标签: matlab csv import


【解决方案1】:

我在上一个项目中打开了大的 csv 文件(大约 700MB)。首先,我使用了xlsread,但发现它有一些限制(我无法打开包含超过 100 万行的文件,并且此功能需要很多时间)。所以我发现textscan 函数非常有用。这里的示例数据示例与您的示例类似:

我的 csv 示例:

11204226    736539.402697001    192.168.0.101   10.0321 1   1.1311  3.543   3   9
11204333    736539.402697002    192.168.0.102   10.0322 2   1.1312  3.543   3   9
11204444    736539.402697003    192.168.0.103   10.0323 3   1.1313  3.543   3   9

我的代码:

fileID = fopen('newfile.csv','r');

formatSpec1 = '%f%f%f%f%f%f%f%f%f%f%f';
A = textscan(fileID, formatSpec1,'Delimiter',{';'});

结果:A 是一个元胞数组。 A 的每个单元格都包含整列数据。 我们可以为 IP 地址做什么? 例如,我建议这样:

myip = strcat( num2str(A{3}),'.',num2str(A{4}),'.',num2str(A{5}))

myip =

192.168.0.0.101
192.168.0.0.102
192.168.0.0.103

myip 是一个字符数组。 保存所有这些数据怎么样? 我们可以将单元格数组转换为双精度数组并删除 ip 列:

res = cell2mat(A);
res(:,3:5) = [];

立即保存:

save('test.mat','res','myip')

使用 mat 文件确实是个好主意,因为它现在包含有用的数据类型,我们可以通过 1 次单击(或 1 行命令)加载它,并且比每次读取 csv 快得多。

【讨论】:

  • 非常感谢您的方法!我能够成功加载数据并将其保存在 .mat 文件中。
猜你喜欢
  • 2017-11-29
  • 2014-11-18
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
相关资源
最近更新 更多