matlab中读取规则txt文件的效率比较

1.load读取方式

只能读取数值数据,不能读取含文本的数据;日期按数值读取。

无需输入分隔符,可自动识别空格、逗号、分号、制表符。

不能自定义读取范围:

适用于txt、csv。

所耗时间:13.030081秒。

2.importdata读取方式

可读取数值数据和含文本的数据,但是要求文本在数据的第一行或第一列(不能同时在行和列都有文本)。返回值分为数值部分(data)和文本部分(textdata)

例如:a=importdata(filename,delm,nheaderlines);

多列数据时需输入分隔符。若不输入分隔符,整行会被作为字符串放入一列。

可从某一行开始读取数值数据。若使用importdata按钮,则可自定义读取范围和设置数据类型。

适用txt、xls、xlsx、csv。

所耗时间:3.437969秒。

3.textscan读取方式

可对列按照自定义格式读取数据,必须输入每列的读取格式,可跳过某个列或几列。按数值读取时,缺少值以NaN填补;按字符读取时,缺少值以空格填补。返回值按列放入元胞数组。

例如:c = textscan(fid,'format',n,'param',value)

可自定义分隔符,不是必须的。

可以自定义读取范围(行列)。

所耗时间:2.188760秒。
如果只读取四列:
所耗时间:1.809791秒。

4 dlmread(不推荐)建议readmatrix

将 ASCII 分隔的数值数据文件读取到矩阵

可以指定行列范围(必须已知结尾行列数,没有inf选项)。

例如 M = dlmread(filename,delimiter,[R1 C1 R2 C2])

dmlread(path);
所耗时间:4.599068秒。

dmlread(path,‘’,[0 0 5 3]);
所耗时间:0.012396秒。

5 readmatrix(2019a版本推出)

A = readmatrix(filename) 通过从文件中读取列向数据来创建数组。readmatrix 函数可自动检测文件的导入参数。

readmatrix 基于文件的扩展名确定文件格式:

(适用于带分隔符的文本文件).txt、.dat 或 .csv

(适用于电子表格文件).xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx 或 .ods

对于包含数值和文本混合数据的文件,默认情况下,readmatrix 将数据作为数值数组导入。

6 fscanf

低级函数,适用范围最广。

使用方法与textscan类似,需要fopen和指定格式(但无法指定精度)。默认按列读取,否则需要指定矩阵大小。
例如:A = fscanf(fileID,formatSpec,[m n])

可以跳过特定字符(比如跳过字母而只保留数字),列数,有inf选项。

fileID = fopen(path);
file = fscanf(fileID,‘%d %f %f %f %f %f %f %f %f %f %f’);
所耗时间:26.793546秒。

跳过一部分后还是很慢……推测是因为不能指定精度造成的。

fileID = fopen(path);
file = fscanf(fileID,‘%d %f %f %f %*f %*f %*f %*f %*f %*f %*f’);
所耗时间:26.824455秒。

总结

通过低级文件 I/O 函数,可以最大程度地控制文件数据的读取和写入。但是,相对于更易于使用的高级函数,例如 importdata,这些低级函数要求指定更为详细的文件信息。有关读取文本文件的高级函数的详细信息,请参阅导入文本文件。

目前来看tesxtscan是最快的,如果跳过一定行列会更快,但是需要输入相应格式,使用起来没有那么方便。importdata速度次之,而且可以不用输入格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值