1、matlab程序运行时间:
测试代码运行时间,几种方法:
(1)tic、toc,使用格式如下:(推荐使用)
tic
……
toc
(2) clock + etime,使用格式如下:
t1=clock;
……
t2=clock;
t=etime(t2,t1)
(3) cputime 最原始的办法是通过cpu主频计算,使用格式如下:
t1=cputime;
……
t2=cputime;
t=t2-t1
(4) profile (推荐使用)
profile on : 开启profile
profile clear: 清空历史数据
profile off: 关闭profile
profile viewer: 查看profile 结果
四种统计程序运行时间的代码如下:
clear;close all;clc;
format long;
% 方法1:tic toc
tic
num=0;
for i=1:100000
num=num+1;
end
toc;
disp(['方法1 tic、toc时间 = ',num2str(toc)]);
%方法2: clock
t1=clock;
num=0;
for i=1:100000
num=num+1;
end
t2=clock;
t=etime(t2,t1);
disp(['方法2 etime(t2,t1) = ',num2str(t)]);
%方法3:cputime
t1=cputime;
num=0;
for i=1:100000
num=num+1;
end
t2=cputime;
t=t2-t1;
disp(['方法3 cputime = ',num2str(t)]);
%方法4:profile
profile on
% profile clear
num=0;
for i=1:100000
num=num+1;
end
profile viewer
2、matlab数据读取:
要分析的数据为:temp_data.txt;其中包含10行数据;如下:
(1)fgetl(fid)
函数功能:从文件中读取一行数据,并去掉行末的换行符。
语法格式:tline = fgetl(fid)
fid是通过fopen函数打开文件后得到的一个整型的文件标识。fgetl从这个文件中读取一行数据并丢弃其中的换行符。如果读取成功,tline容纳了读取到的文本字符串,如果遇到文件末尾的结束标志(EOF),则函数返回-1,即tline值为-1。
返回的字符串tline并不包含文本行的行终止符。要得到行终止符,可以使用函数fgets。
-
如果文件非空,则
fgetl
以字符向量形式返回tline
。 -
如果文件为空且仅包含文件末尾标记,则
fgetl
以数值-1
的形式返回tline
。
使用代码:
filename='temp_data.txt'
i=0;
fid=fopen(filename);
while 1
i=i+1;
tline = fgetl(fid);
if tline==-1, break, end
nav_data(i,:)=str2num(tline);
end
fclose(fid);
查看nav_data,如下:
(2)fgets() 从文件中读取行,保留换行符 (换行符和回车符)
调用形式,如下:
读取指定文件中的下一行内容,并包含换行符。tline
= fgets(fileID
)
返回下一行中的最多 tline
= fgets(fileID
,nchar
)nchar
个字符。
举例:fgets(_,10) 只输出10个字符;
因为fgetl()内嵌了fgets()函数,且下文分析了两者的区别!
两者的区别:
- fgetl:内嵌了fgets函数(如下所示);但是删除了行末的换行符!
function tline = fgetl(fid)
narginchk(1,1)
[tline,lt] = fgets(fid);
tline = tline(1:end-length(lt));
if isempty(tline)
tline = '';
end
end
- 因为fgetl不包括换行符、fgets包括换行符、回车符;因此,两个函数返回的字符长度是不一样的;
示例:
结果:
示例参考:
回车、换行的十六进制为ox0D、ox0A
转义字符 | 意义 | ASCII码值(十进制) | ASCII码值(十六进制) |
\a | 响铃(BEL) | 007 | 0x07 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 | 0x08 |
\f | 换页(FF),将当前位置移到下页开头 | 012 | 0x0C |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 | 0x0A |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 | 0x0D |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 | 0x09 |
\v | 垂直制表(VT) | 011 | 0x0B |
\\ | 代表一个反斜线字符''\' | 092 | 0x5C |
\' | 代表一个单引号(撇号)字符 | 039 | 0x27 |
\" | 代表一个双引号字符 | 034 | 0x22 |
\? | 代表一个问号 | 063 | 0x3F |
\0 | 空字符(NULL) | 000 | 0x00 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 | |
\xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
0010 0000 | 040 | 32 | 0x20 | (space) | 空格 |
回车、换行的区别:
不同操作系统下换行符不同,如下:
\n: UNIX
\n\r: window
\r: MAC OS
(3)fread 读取二进制文件中的数据
将打开的二进制文件中的数据读取到列向量 A
= fread(fileID
)A
中,并将文件指针定位在文件结尾标记处。该二进制文件由文件标识符 fileID
指示。使用 fopen
可打开文件并获取 fileID
值。读取文件后,请调用 fclose(fileID)
来关闭文件。
将文件数据读取到维度为 A
= fread(fileID
,sizeA
)sizeA
的数组 A
中,并将文件指针定位到最后读取的值之后。fread
按列顺序填充 A
。
根据 A
= fread(fileID
,sizeA
,precision
)precision
描述的格式和大小解释文件中的值。sizeA
参数为可选参数。
在读取文件中的每个值之后将跳过 A
= fread(fileID
,sizeA
,precision
,skip
)skip
指定的字节或位数。sizeA
参数为可选参数。
另外指定在文件中读取字节或位时的顺序。A
= fread(fileID
,sizeA
,precision
,skip
,machinefmt
)sizeA
和 skip
参数是可选的。
[
还将返回 A
,count
] = fread(___)fread
读取到 A
中的字符数。您可以将此语法与前面语法中的任何输入参数结合使用。
参考链接:fread
(4)importdata()
importdata(‘文件名’, ‘分隔符’, ‘n’);
将数据存入“结构体”,其中,n表示n行表头;也可以用来读入图片
代码如下:
filename = 'Calibration.txt';
delimiterIn = ' ';
headerlinesIn = 2;
% newData = importdata('Static_Data200422114432.txt','\t', 2);
[newData,delimiterOut] = importdata(filename);
结果:
其中Calibration.txt中数据如下:
参考: