【MATLAB】常用函数(更新中)
2014-04-11 22:05
323 查看
1.cat
2.cell2mat,mat2cell
3.dir
4.addpath【增加路径】,cd【在程序中更改当前路径】
cur_dir = pwd;
cd('e:/test');
....
cd( cur_dir );
addpath(genpath('.'));%添加当前文件夹及其子文件夹到路径
5.whos
6.exist 以及
isfield
p = load('123.mat');%这个mat里存的是名为box的变量
%这时候用exist('p.box','var')是不行的。
if isfield(p,'box')
……
end
7.parfor【不算函数,可用于并行计算】
8.squeeze【除去size为1的维度】
9.lower 【字母变小写】
10.pwd【当前路径】
11.global 【全局变量】
12. all ,any
13. nargin【判断变量个数】
14.system 【可以在matlab下调用dos命令。】
temp=3;%temp是abc.exe所需要的参数
vari = ['e:\abc.exe',temp];
system(vari);
15.从字符中提取数字
str='ajsk123sjkl'
A=isstrprop(str,'digit');
%A =
% 0 0 0 0 1 1 1 0 0 0 0
B=str(A);
%B =123 字符
C=str2num(B)
%C=123 数字
16.字符串处理(转自http://blog.sina.com.cn/s/blog_5116499f0100v54b.html)
%取子字符串,假设字符串存在ch里面
ch='abc'
kk=ch(2:end)
》bc
%声明字符串向量
A=['';'';'']
%利用冒号取字符串向量的第二行
A(2;:);
%******************上面是笔记********************
%******************下面是转载的******************
%字符串处理
a=' a';b='b b';c='cccc';m=''
%获取字符串长度
length(a)
%连接两个字符串,每个字符串最右边的空格被裁切
d=strcat(a,c)
length(d)
%连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格
%使与最长字符串相等,会忽略空字符串
e=strvcat(a,b,m)
size(e)
%char连接,空字符串会被空格填满
f=char(a,b,m)
size(f)
%strcmp 比较两个字符串是否完全相等,是,返回真,否则,返回假
%strncmp 比较两个字符串前n个字符是否相等,是,返回真,否则,返回假
%strcmpi 比较两个字符串是否完全相等,忽略字母大小写
%strncmpi 比较两个字符串前n个字符是否相等,忽略字母大小写
%isletter 检测字符串中每个字符时否属于英文字母
%isspace 检测字符串中每个字符是否属于格式字符(空格,回车,制表,换行符等)
%isstrprop 检测字符每一个字符是否属于指定的范围
a='d sdsdsd 15#';
b=isletter(a)
c=isspace(a)
%字符串替换和查找
%strrep进行字符串替换,区分大小写
% strrep(str1,str2,str3)
% 它把str1中所有的str2字串用str3来替换
%strfind(str,patten) 查找str中是否有pattern,返回出现位置,没有出现返回空数组
%findstr(str1,str2) 查找str1和str2中,较短字符串在较长字符串中出现的位置,没有出现返回空数组
%strmatch(patten,str) 检查patten是否和str最左侧部分一致
%strtok(str,char) 返回str中由char指定的字符串前的部分和之后的部分,
mm='youqwelcome';
[mm1,mm2]=strtok(mm,'q')
% blanks(n) 创建有n个空格组成的字符串
% deblank(str) 裁切字符串的尾部空格
% strtrim(str) 裁切字符串的开头和尾部的空格,制表,回车符
% lower(str) 将字符串中的字母转换成小写
% upper(str) 将字符串中的字母转换成大写
%sort(str) 按照字符的ASCII值对字符串排序
%num2str 将数字转换为数字字符串
%str2num 将数字字符串转换为数字
%mat2str 将数组转换成字符串
%int2str 把数值数组转换为整数数字组成的字符数组
MATLAB提供了大量的字符串函数,包括列在表6.3当中的。
表6.3
字 符 串 函 数
eval_r(string)
作为一个MATLAB命令求字符串的值
eval_r(try,catch)
blanks(n)
返回一个n个零或空格的字符串
deblank
去掉字符串中后拖的空格
feval
求由字符串给定的函数值
findstr
从一个字符串内找出字符串
isletter
字母存在时返回真值
isspace
空格字符存在时返回真值
isstr
输入是一个字符串,返回真值
lasterr
返回上一个所产生MATLAB错误的字符串
strcmp
字符串相同,返回真值
strrep
用一个字符串替换另一个字符串
strtok
在一个字符串里找出第一个标记
列在上面的第一个函数eval给MATLAB提供宏的能力。其中,该函数提供了将用户创建的函数名传给其它函数能力,以便求值。它的应用例子包括:
» a=eval_r(' sqrt(2) ')
a =
1.4142
» eval_r(' a=sqrt(2) ')
a =
1.4142
上面的例子演示了函数eval。显然,它们不是计算2的平方根的最简单方法。当被求值的字符串是由子字符串连接而成,或将字符串传给一个函数以求值时,eval非常有用。说明这种用途例子本书的以后会提及。
如果字符串传递到eval不能被辨认,MATLAB提供下列语法:
» eval_r(' a=sqrtt(2) ',' a=[ ] ')
a =
[ ]
这里第二个参量被执行。由于第一个参量有误,即sqrtt不是一个有效的MATLAB函数。这种形式经常被描述为eval_r(try,catch)。
函数feval与eval类似,但在用法上有更多的限制。feval_r(' fun ',x)求由字符串' fun '给定的函数值,其输入参量是变量x。即feval_r(' fun ',x)等价于求fun(x)值。例如,
» a=feval_r(' sqrt ' ,2)
a =
1.4142
函数eval,feval的基本用途限在用户创建的函数内。一般地,feval可求出有大量输入参量的函数值,例如,feval_r(' fun ', x, y, z) 等价于求fun(x, y, z)值。
列在上面表中的许多字符串函数提供了基本的字符串语法分析能力。例如,findstr返回一个在另一个字符串内字符串的起始下标值。
» b=' Peter Piper picked a peck of pickled peppers ' ;
» findstr(b,' ') % find space
ans =
6 12 19 21 26 29 37
» findstr(b,' p ') % find the letter p
ans =
9 13 22 30 38 40 41
» find(b= = ' p ') % for single character searches the find command works too
ans =
9 13 22 30 38 40 41
» findstr(b, ' cow ') % find the word cow
ans =
[ ]
» findstr(b,' pick ') % find the string pick
ans =
13 30
注意这个函数对大小写是敏感的,当不匹配时,返回空矩阵。findstr对字符串矩阵不起作用。
» strrep(b, ' p ', ' P ') % capitalize all p ' s
ans =
Peter PiPer Picked a Peck of Pickled PePPers
» strrep(b, ' Peter ', ' Pamela ') % change Peter to Pamela
ans =
Pamela Piper picked a peck of pickled peppers
正如上面所看到的,strrep执行简单的字符串替代。strrep对字符串矩阵不起作用。
函数strtok找出由特定字符指定的字符串内的标记,空格是缺省限定字符。例如,
» disp(b)
Peter Piper picked a peck of pickled peppers
» strtok(b) % find first token in above string separated by whitespace
ans =
Peter
» [c, r]=strtok(b) % return the remainder of the string array in r
c =
Peter
r =
Piper picked a peck of pickled peppers
» [d,s]=strtok(r) %find the next token by using the previous remainder
d =
Piper
s =
picked a peck of pickled peppers
用空格作为限定符,strtok找出在数组中的单词。strtok对字符串矩阵不起作用。
» [d, s]=strtok(b, ' pP ') %let delimiter be lower or upper case P
d =
eter
s =
Piper picked a peck of pickled peppers
如果提供一个可选的字符串,它的字符是限定符。注意在标记里,不返回限定符,但返回所有限定符之前的字符。也就是,在上面的字符串d = eter末端有一个空格。
17.写文件。
一般都拿fprintf写文件,但是刚才想要输出一个1000维的向量,不想用for循环,总算是查到了下面一个用法:
例:
x=0:0.1:1;
y=[x;exp(x)];
fid=fopen('exp.txt','w')
fprintf(fid,'%6.2f %12.8f\n',y);
计算结果:
0.0 1.00000000
0.1 1.10517092
1.00 2.71828183
18. 逗号分隔的字符串
在读文件a.txt,格式是相同的,有好多好多行,每行的数据是以逗号分隔,比如某行是:‘begintime,vmos,df,mlr,jitter,hour’
fid = fopen('a.txt','r');
data = fgets(fid);
a=regexp(data,',','split')
输出:
1x6的cell~~
19.接上一条
如果某行是“123 123 2 90 20”,这样的以空格间隔的。
fid = fopen('a.txt','r');
data = fgets(fid);
data =regexp(data,' ','split');
得到是1x4的cell,每个cell都是字符型。但是我们想得到double型,且不用for循环的话:
1. str2num(char(data))
2. cellfun(@str2num, data)
这两个方法来自(http://blog.163.com/6_mao/blog/static/632713152012318111738729/)
20. 索引
% sub2ind
h=150;w=60; norm_sz=[h,w];
grid_step=5;patch_size=15;
x = 1 : grid_step : w - patch_size + 1;
y = 1 : grid_step : h - patch_size + 1;
[xx, yy] = meshgrid(x, y);
pixels = zeros(patch_size * patch_size, size(xx, 1), size(xx, 2));
for r = 1 : size(xx, 1)
for c = 1 : size(xx, 2)
start_x = xx(r, c);
start_y = yy(r, c);
[temp_x, temp_y] = meshgrid(start_x : start_x + 14, start_y : start_y + 14);
pixels(:, r, c) = sub2ind(norm_sz, temp_y(:), temp_x(:));
end
end
% ind2sub
for m = 1 :ny*nx
temp_pixels = pixels(:, m);
[r1,c1] = ind2sub(norm_sz,temp_pixels(1));
[r2,c2] = ind2sub(norm_sz,temp_pixels(end));
end
21.矩阵复制 repmat
det = struct( 'imDir', [], ...
'imageName', [], ...
'center', [], ...
'dimension', [], ...
'part', [], ...
'partHist', [] );
trajectory = repmat(det, [numDet, 1]);
22. 保存图像
saveas(gcf,fullfile(out_path,images{i}.name)); (会有白边)
A = getframe;% 擷取畫面,形成矩陣
imwrite(A.cdata,‘e:\data\a.png,'png'); (无白边)
2.cell2mat,mat2cell
3.dir
4.addpath【增加路径】,cd【在程序中更改当前路径】
cur_dir = pwd;
cd('e:/test');
....
cd( cur_dir );
addpath(genpath('.'));%添加当前文件夹及其子文件夹到路径
5.whos
6.exist 以及
isfield
p = load('123.mat');%这个mat里存的是名为box的变量
%这时候用exist('p.box','var')是不行的。
if isfield(p,'box')
……
end
7.parfor【不算函数,可用于并行计算】
8.squeeze【除去size为1的维度】
9.lower 【字母变小写】
10.pwd【当前路径】
11.global 【全局变量】
12. all ,any
13. nargin【判断变量个数】
14.system 【可以在matlab下调用dos命令。】
temp=3;%temp是abc.exe所需要的参数
vari = ['e:\abc.exe',temp];
system(vari);
15.从字符中提取数字
str='ajsk123sjkl'
A=isstrprop(str,'digit');
%A =
% 0 0 0 0 1 1 1 0 0 0 0
B=str(A);
%B =123 字符
C=str2num(B)
%C=123 数字
16.字符串处理(转自http://blog.sina.com.cn/s/blog_5116499f0100v54b.html)
%取子字符串,假设字符串存在ch里面
ch='abc'
kk=ch(2:end)
》bc
%声明字符串向量
A=['';'';'']
%利用冒号取字符串向量的第二行
A(2;:);
%******************上面是笔记********************
%******************下面是转载的******************
%字符串处理
a=' a';b='b b';c='cccc';m=''
%获取字符串长度
length(a)
%连接两个字符串,每个字符串最右边的空格被裁切
d=strcat(a,c)
length(d)
%连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格
%使与最长字符串相等,会忽略空字符串
e=strvcat(a,b,m)
size(e)
%char连接,空字符串会被空格填满
f=char(a,b,m)
size(f)
%strcmp 比较两个字符串是否完全相等,是,返回真,否则,返回假
%strncmp 比较两个字符串前n个字符是否相等,是,返回真,否则,返回假
%strcmpi 比较两个字符串是否完全相等,忽略字母大小写
%strncmpi 比较两个字符串前n个字符是否相等,忽略字母大小写
%isletter 检测字符串中每个字符时否属于英文字母
%isspace 检测字符串中每个字符是否属于格式字符(空格,回车,制表,换行符等)
%isstrprop 检测字符每一个字符是否属于指定的范围
a='d sdsdsd 15#';
b=isletter(a)
c=isspace(a)
%字符串替换和查找
%strrep进行字符串替换,区分大小写
% strrep(str1,str2,str3)
% 它把str1中所有的str2字串用str3来替换
%strfind(str,patten) 查找str中是否有pattern,返回出现位置,没有出现返回空数组
%findstr(str1,str2) 查找str1和str2中,较短字符串在较长字符串中出现的位置,没有出现返回空数组
%strmatch(patten,str) 检查patten是否和str最左侧部分一致
%strtok(str,char) 返回str中由char指定的字符串前的部分和之后的部分,
mm='youqwelcome';
[mm1,mm2]=strtok(mm,'q')
% blanks(n) 创建有n个空格组成的字符串
% deblank(str) 裁切字符串的尾部空格
% strtrim(str) 裁切字符串的开头和尾部的空格,制表,回车符
% lower(str) 将字符串中的字母转换成小写
% upper(str) 将字符串中的字母转换成大写
%sort(str) 按照字符的ASCII值对字符串排序
%num2str 将数字转换为数字字符串
%str2num 将数字字符串转换为数字
%mat2str 将数组转换成字符串
%int2str 把数值数组转换为整数数字组成的字符数组
MATLAB提供了大量的字符串函数,包括列在表6.3当中的。
表6.3
字 符 串 函 数
eval_r(string)
作为一个MATLAB命令求字符串的值
eval_r(try,catch)
blanks(n)
返回一个n个零或空格的字符串
deblank
去掉字符串中后拖的空格
feval
求由字符串给定的函数值
findstr
从一个字符串内找出字符串
isletter
字母存在时返回真值
isspace
空格字符存在时返回真值
isstr
输入是一个字符串,返回真值
lasterr
返回上一个所产生MATLAB错误的字符串
strcmp
字符串相同,返回真值
strrep
用一个字符串替换另一个字符串
strtok
在一个字符串里找出第一个标记
列在上面的第一个函数eval给MATLAB提供宏的能力。其中,该函数提供了将用户创建的函数名传给其它函数能力,以便求值。它的应用例子包括:
» a=eval_r(' sqrt(2) ')
a =
1.4142
» eval_r(' a=sqrt(2) ')
a =
1.4142
上面的例子演示了函数eval。显然,它们不是计算2的平方根的最简单方法。当被求值的字符串是由子字符串连接而成,或将字符串传给一个函数以求值时,eval非常有用。说明这种用途例子本书的以后会提及。
如果字符串传递到eval不能被辨认,MATLAB提供下列语法:
» eval_r(' a=sqrtt(2) ',' a=[ ] ')
a =
[ ]
这里第二个参量被执行。由于第一个参量有误,即sqrtt不是一个有效的MATLAB函数。这种形式经常被描述为eval_r(try,catch)。
函数feval与eval类似,但在用法上有更多的限制。feval_r(' fun ',x)求由字符串' fun '给定的函数值,其输入参量是变量x。即feval_r(' fun ',x)等价于求fun(x)值。例如,
» a=feval_r(' sqrt ' ,2)
a =
1.4142
函数eval,feval的基本用途限在用户创建的函数内。一般地,feval可求出有大量输入参量的函数值,例如,feval_r(' fun ', x, y, z) 等价于求fun(x, y, z)值。
列在上面表中的许多字符串函数提供了基本的字符串语法分析能力。例如,findstr返回一个在另一个字符串内字符串的起始下标值。
» b=' Peter Piper picked a peck of pickled peppers ' ;
» findstr(b,' ') % find space
ans =
6 12 19 21 26 29 37
» findstr(b,' p ') % find the letter p
ans =
9 13 22 30 38 40 41
» find(b= = ' p ') % for single character searches the find command works too
ans =
9 13 22 30 38 40 41
» findstr(b, ' cow ') % find the word cow
ans =
[ ]
» findstr(b,' pick ') % find the string pick
ans =
13 30
注意这个函数对大小写是敏感的,当不匹配时,返回空矩阵。findstr对字符串矩阵不起作用。
» strrep(b, ' p ', ' P ') % capitalize all p ' s
ans =
Peter PiPer Picked a Peck of Pickled PePPers
» strrep(b, ' Peter ', ' Pamela ') % change Peter to Pamela
ans =
Pamela Piper picked a peck of pickled peppers
正如上面所看到的,strrep执行简单的字符串替代。strrep对字符串矩阵不起作用。
函数strtok找出由特定字符指定的字符串内的标记,空格是缺省限定字符。例如,
» disp(b)
Peter Piper picked a peck of pickled peppers
» strtok(b) % find first token in above string separated by whitespace
ans =
Peter
» [c, r]=strtok(b) % return the remainder of the string array in r
c =
Peter
r =
Piper picked a peck of pickled peppers
» [d,s]=strtok(r) %find the next token by using the previous remainder
d =
Piper
s =
picked a peck of pickled peppers
用空格作为限定符,strtok找出在数组中的单词。strtok对字符串矩阵不起作用。
» [d, s]=strtok(b, ' pP ') %let delimiter be lower or upper case P
d =
eter
s =
Piper picked a peck of pickled peppers
如果提供一个可选的字符串,它的字符是限定符。注意在标记里,不返回限定符,但返回所有限定符之前的字符。也就是,在上面的字符串d = eter末端有一个空格。
17.写文件。
一般都拿fprintf写文件,但是刚才想要输出一个1000维的向量,不想用for循环,总算是查到了下面一个用法:
例:
x=0:0.1:1;
y=[x;exp(x)];
fid=fopen('exp.txt','w')
fprintf(fid,'%6.2f %12.8f\n',y);
计算结果:
0.0 1.00000000
0.1 1.10517092
1.00 2.71828183
18. 逗号分隔的字符串
在读文件a.txt,格式是相同的,有好多好多行,每行的数据是以逗号分隔,比如某行是:‘begintime,vmos,df,mlr,jitter,hour’
fid = fopen('a.txt','r');
data = fgets(fid);
a=regexp(data,',','split')
输出:
1x6的cell~~
19.接上一条
如果某行是“123 123 2 90 20”,这样的以空格间隔的。
fid = fopen('a.txt','r');
data = fgets(fid);
data =regexp(data,' ','split');
得到是1x4的cell,每个cell都是字符型。但是我们想得到double型,且不用for循环的话:
1. str2num(char(data))
2. cellfun(@str2num, data)
这两个方法来自(http://blog.163.com/6_mao/blog/static/632713152012318111738729/)
20. 索引
% sub2ind
h=150;w=60; norm_sz=[h,w];
grid_step=5;patch_size=15;
x = 1 : grid_step : w - patch_size + 1;
y = 1 : grid_step : h - patch_size + 1;
[xx, yy] = meshgrid(x, y);
pixels = zeros(patch_size * patch_size, size(xx, 1), size(xx, 2));
for r = 1 : size(xx, 1)
for c = 1 : size(xx, 2)
start_x = xx(r, c);
start_y = yy(r, c);
[temp_x, temp_y] = meshgrid(start_x : start_x + 14, start_y : start_y + 14);
pixels(:, r, c) = sub2ind(norm_sz, temp_y(:), temp_x(:));
end
end
% ind2sub
for m = 1 :ny*nx
temp_pixels = pixels(:, m);
[r1,c1] = ind2sub(norm_sz,temp_pixels(1));
[r2,c2] = ind2sub(norm_sz,temp_pixels(end));
end
21.矩阵复制 repmat
det = struct( 'imDir', [], ...
'imageName', [], ...
'center', [], ...
'dimension', [], ...
'part', [], ...
'partHist', [] );
trajectory = repmat(det, [numDet, 1]);
22. 保存图像
saveas(gcf,fullfile(out_path,images{i}.name)); (会有白边)
A = getframe;% 擷取畫面,形成矩陣
imwrite(A.cdata,‘e:\data\a.png,'png'); (无白边)
23. permute(多维数组,[维数的组合]) 比如: a=rand(2,3,4); %这是一个三维数组,各维的长度分别为:2,3,4 %现在交换第一维和第二维: permute(A,[2,1,3]) %变成3*2*4的矩阵
相关文章推荐
- matlab常用函数备忘录(持续更新)
- matlab常用函数备忘录(持续更新)
- MATLAB常用数学函数2(不断更新中)
- MATLAB常用函数(不断更新中)
- matlab gui 以及常用函数
- 常用的函数收集(实时更新)
- matlab常用函数总结
- 【持续更新】MATLAB函数查询字典
- SQL Server 常用函数使用方法(持续更新)
- SQL2000 中常用的函数收集(持续更新)
- matlab 函数的一些常用函数
- matlab中一些常用的函数
- 【R语言】常用的字符串处理函数 【待更新】
- Matlab常用函数之evalin
- Matlab常用函数之gcf&gca
- [matlab]mathworks上的cody challenge题解及一些常用函数的总结(7)
- ORACLE常用函数汇总(持续更新中....)
- cv下的常用类、函数笔记(持续更新中)
- 【笔记】MATLAB一些常用函数
- JavaScript中常用函数(入门级)(持续更新)