matlab文本文件读写测试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB 读取数据的函数的速度测试及函数易用性分析
1.问题描述:
对于外部采集的数据常常用Excel 软件格式存取,Excel 的好处是对数据修改方便,看起来更直观。但当对Excel 软件的格式的文件如xlsx 格式进行存取时,存在速度较慢的问题。本文基于MATLAB 软件测试了几种文件读取函数对相同数据但文件格式不一定相同文件的读取速度,并对造成函数速度差异的原因进行简要的分析。2.测试的函数
2.1 函数的结构分析
图1 函数调用关系(上层为被调函数,下层为主调函数,测试的函数用红色斜体表示出来)3. 函数读取速度测试3.1 测试数据的构建
由于xlsread,csvread 读取数据时要求必须可以转化为浮点型构建下面的数据
3.2 测试方法
用每个函数读取数据到矩阵中,并重复N 次并对读取时间求和,然后取均值。程序见附录A 。对于xlsread 函数,它有两种读取Excel 文件的方式,即调用Excel 程序的COM 接口的方式和通过解析xml 文件的方式,在程序中分别以xlsread 和xlsreadB 两个名称来区分测试结果。同时由于import 也支持文本和xlsx 文件格式因而同时也分别做了测试,并在程序中以importdata 和importdataX 来区分对文本文件的操作和对xlsx 文件的操作。3.3测试结果表3 测试结果函数名称xlsread
xlsreadB
load
csvread
importdata importdataX textscan
时间0.3821810.1172650.0006780.0015320.033278 3.6991510.000353时间比1082
332
2
4
94
10479
1
第二行为精确结果单位为秒,最后一行表示对最后的textscan 测试结果的倍数,数据进行了近似
4. 测试结果分析和易用性分析
从上面的测试结果可以明显看出xlsread 的速度很慢无论是采用COM 接口还是直接读取xml 文件的方法,而load,csvread,textscan 的速度相近,csvread 比textscan 慢一些,而从2.1的函数结构可以看出csvread 需要调用textscan 造成了csvread 较慢的速度。都比较快,而importdata 对文本文件的操作速度则较前面三个函数慢了很多。
从易用性看,由于Excel 表示直观,修改方便,一个文件可以存储多个表格,可以比较好的实现数据存储修改和数据处理相分离。Excel 对非xlsx 类型的文本文件的支持情况将表4。load 和textscan 都是比较底层的函数。load 只支持mat 和文本文件,而textscan 则只支持文本文件,同
时textscan 还要自己分析数据结构并写出解析字符串,在易用性上不高。由于Excel 支持.csv 格
式的文件,因而.csv 进行数据存储修改然后用csvread 读取也是一个可行的方案,同时csv 也支持表格的选取,但.csv 有个缺点是不能支持多个表格。综合以上分析对各个函数的易用性和速度总结在表4中。
表4 Excel 对文本格式文件的编辑支持
文件类型.txt
.csv
.prn
支持程度
可保存,可读取,但有
数据格式限制可存,可读取,数据格式无限制
可存,不可读取
表5 各个函数的综合评价函数名称xlsread xlsreadB load csvread importdata textscan 速度125505易用性
5
5
3
45
2
附录A:
function xlsreadTest(N)
if nargin < 1
N = 1000;
end
tic;
for i= 1:N
num = xlsread('data.xlsx');
end
t1=toc;
% test the xlsread with basic mode tic;
for i = 1:N
num = xlsread('data.xlsx','','','basic'); end
t1_1 = toc;
% test the load
tic
for i=1:N
num = load('data.txt');
end
t2 = toc;
% test the csvread
tic
for i=1:N
M = csvread('data.csv');
end
t3 = toc;
% test the importdata
tic
for i=1:N
M = importdata('data.txt');
end
t4 = toc;
% test the importdata with xlsx filetype tic
for i=1:N
M = importdata('data.xlsx');
end
t5 = toc;
% test the textscan
tic
for i=1:N
f = fopen('data.txt');
M = textscan(f,'%f %f %f %f %f %f');
C = [];
for j = 1:length(M)
C = [C M{j}];
end
fclose(f);
end
t6 = toc;
fprintf('xlsread\txlsreadB\tload\tcsvread\timportdata\timportdataX\ttextscan\n'); fprintf('%f\t%f\t%f\t%f\t%f\t%f\n',t1/N,t1_1/N,t2/N,t3/N,t4/N,t5/N,t6/N);