Matlab 数据类型转换、字符串处理、路径处理、GUI 对话框、随机数生成

数据类型转换

1、数值型矩阵转换为字符数组(num2str、mat2str)

>> A=[1,2,3;4,5,6];
>> B=num2str(A)

B =
1  2  3
4  5  6
>> whos
 Name     Size           Bytes Class    Attributes
 A        2x3               48 double             
 B        2x7               28  char  

2、字符数组转换为数值型(str2num<4位精度>、str2double<双精度>)

>> B=['123.34'];
>> A=str2num(B)

A =
  123.3400

>> whos
 Name     Size           Bytes Class    Attributes
 A        1x1                8 double             
 B        1x6               12 char   

3、单元数组转换为字符数组(cell2mat)

>>A={'sfjsdlgksdgjlsdjgkl'};
>>B=cell2mat(A)

B =
sfjsdlgksdgjlsdjgkl

>> whos
 Name     Size           Bytes Class   Attributes
 A        1x1               98 cell              
 B        1x19              38 char

对cell数组的操作函数:
cell:创建空的元胞数组
cellfun:为元胞数组的每个元胞执行指定的函数
celldisp:显示所有元胞的内容
cellplot:利用图形方式显示元胞数组
cell2mat:将元胞数组转变成为普通的矩阵
mat2cell:将数值矩阵转变成为元胞数组
num2cell:将数值数组转变成为元胞数组
deal:将输入参数赋值给输出
cell2struct:将元胞数组转变成为结构
struct2cell:将结构转变为元胞数组
iscell:判断输入是否为元胞数组

cellfun函数:
主要功能是对元胞数组的元素(元胞)分别指定不同的函数;能在cellfun中使用的函数如下:
isempty:若元胞元素为空,则返回逻辑真
islogical:若元胞元素为逻辑类型,则返回逻辑真
isreal:若元胞元素为实数,则返回逻辑真
length:元胞元素的长
ndims:元胞元素的维数
prodofsize:元胞元素包含的元素个数

a={123,'abcde';1-7i,ones(3,3)}
a =
    [             123]    'abcde'    
    [1.0000 - 7.0000i]    [3x3 double]

>> b=cellfun('isreal',a)
b =
     1     1
     0     1
     
>> c=cellfun('length',a)
c =
     1     5
     1     3

4、字符数组转换为单元数组(cellstr)

>>A=['what';'edit';'play'];%注意:用A=[]生成字符数组是,必须保证每行有相同的长度,不够可用空格补
>>B=cellstr(A)

B =
   'what'
    'edit'
    'play'

>> whos
 Name     Size           Bytes Class   Attributes
 A        3x4               24 char              
 B        3x1              204 cell    

5、单元数组转换为数值型矩阵

>> A={'123.4'};
>> B=cell2mat(A)

B =
123.4

>> C=str2num(B)
C =
  123.4000

>> whos
 Name     Size           Bytes Class    Attributes
 A        1x1               70 cell               
 B        1x5               10 char               
 C        1x1                8  double 

6、数值型矩阵转换为单元数组(num2cell)

>> A=[1,2,3;4,5,6];
>> B=num2cell(A)

B =
   [1]   [2]    [3]
   [4]   [5]    [6]

>> whos
 Name     Size           Bytes Class    Attributes
 A        2x3               48 double             
 B        2x3              408  cell  

7、字符串数组、cell细胞元素区别

% 例1:创建一个字符串数组,记住补空格
>>S= ['abc '; 'defg';'hi  '] (下划线代表空格)
S =
abc
defg
hi

>>whos S
Name Size Bytes Class
S 

   3x4  24    chararray

% 例2:下面使用cellstr将字符数组,转换为3*1的cell细胞元组,此时尾部空格会自动删除 :
>>c = cellstr(S)
c =
'abc'
'defg'
'hi'

>>whos c
Name Size Bytes Class
c    3x1 294   cellarray

% 例3:再使用char函数将cell字符串转换为字符数组
>>char(c)
ans =
abc
defg
hi

>> whos ans
Name Size Bytes Class Attributes
ans 3x4  24    char


字符串处理

1、获取字符串长度

length(a)    

2、连接两个字符串, 每个字符串最右边的空格被裁切

% 方法一:中括号
SC=[str1,str2]
SC = Iloveyou123

%方法二:strcat函数 
SB=strcat(str1,str2)
SB = Iloveyou123

strcat(['Red','Yellow'],['Green','Blue'])
ans = RedYellowGreenBlue

strcat({'Red','Yellow'},{'Green','Blue'})
ans =
{
  [1,1] = RedGreen
  [1,2] = YellowBlue
}

%方法三:sprintf函数
STR=sprintf('%s%d',str1,789)
STR = Iloveyou789

3、连接多行字符串

e=strvcat(a,b,c)

4. char连接,空字符串会被空格填满

f=char(a,b,m)

5.字符串分割

S = regexp(str, char, 'split')	% str:待分割字符串  char: 作为分隔符的字符 s:字符分割出的结果

str_sample = '    Hello   Nocturne   Studio    '
new_str = strtrim(str_sample)	% 删除首尾空白
new_str = Hello     Nocturne Studio

% 符串是以一个或多个空格分隔
S = regexp(new_str , '\s+', 'split')
S =
{
  [1,1] = Hello
  [1,2] = Nocturne
  [1,3] = Studio
}

S(1)		% cell型
ans =
{
  [1,1] = Hello
}

char(S(1))		% str型
ans = Hello

% 以制表符分隔
S = regexp(new_str , '\t', 'split')
S =
{
  [1,1] = Hello     Nocturne Studio
}

6. 判断字符串是否相等

% strcmp    比较两个字符串是否完全相等,是,返回真,否则,返回假
% strncmp    比较两个字符串前n个字符是否相等,是,返回真,否则,返回假
% strcmpi    比较两个字符串是否完全相等,忽略字母大小写
% strncmpi   比较两个字符串前n个字符是否相等,忽略字母大小写

% isletter  检测字符串中每个字符时否属于英文字母
% isspace    检测字符串中每个字符是否属于格式字符(空格,回车,制表,换行符等)
% isstrprop  检测字符每一个字符是否属于指定的范围

a='d sdsdsd 15#';
b=isletter(a)
c=isspace(a)
b =
  1  0  1  1  1  1  1  1  0  0  0  0

c =
  0  1  0  0  0  0  0  0  1  0  0  0

7. 字符串替换和查找

% 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')
mm1 = you
mm2 = qwelcome

% blanks(n)            创建有n个空格组成的字符串
% deblank(str)          裁切字符串的尾部空格
% strtrim(str)          裁切字符串的开头和尾部的空格,制表,回车符

% lower(str)           将字符串中的字母转换成小写
% upper(str)            将字符串中的字母转换成大写 
% sort(str)              按照字符的ASCII值对字符串排序

% num2str         将数字转换为数字字符串
% str2num          将数字字符串转换为数字
% mat2str          将数组转换成字符串
% int2str          把数值数组转换为整数数字组成的字符数组

8. CELL数组中的字符串比较

c=cell(2,1);
c(1,1)=cellstr('xxx')
c(2,1)=cellstr('yyyyyyy')
strcmp(c{1,1},c{2,1})
c =
{
  [1,1] = xxx
  [2,1] = [](0x0)
}

c =
{
  [1,1] = xxx
  [2,1] = yyyyyyy
}

ans = 0

9. 字符串合并和分割(空格)

合并

C = {'one','two','three'};
str = strjoin(C)
str = one two three

分割

str = 'The rain in Tokyo.';
C = char(strsplit(str))

C =
The   
rain  
in    
Tokyo.

D = char(strsplit(str)(4))
D = Tokyo.


路径处理


1、filesep : 返回特定于平台的文件分隔符

f = filesep

% Windows 反斜杠(\)
iofun_dir = ['toolbox' filesep 'matlab' filesep 'iofun']
iofun_dir =
    'toolbox\matlab\iofun'
    
% Linux 斜杠(/)
iofun_dir = ['toolbox' filesep 'matlab' filesep 'iofun']
iofun_dir = 
'toolbox/matlab/iofun'

2、fullfile : 将若干字符串连接成一个完整的路径

f=fullfile('D:','Matlab','example.txt')  
f=D:\Matlab\example.txt

3、fileparts : 对于特定路径 获取路径、名称、扩展名

f=fullfile('D:','Matlab','example.txt');  
[pathstr,name,ext]=fileparts(f)
pathstr = D:/Matlab
name = example
ext = .txt

3、pathsep: 对于特定路径 获取路径、名称、扩展名

f=fullfile('D:','Matlab','example.txt');  
[pathstr,name,ext]=fileparts(f)
pathstr = D:/Matlab
name = example
ext = .txt

4、exist: 用于判断目录或者文件是否存在,同时不同的返回值有不同的含义

f=fullfile('D:','Matlab','example.txt');  
exist(f)
ans=2

exist('D:\Matlab')  
ans  =7

5、isdir: 判断一个路径是否代表了一个目录

p='D:\Matlab';
f=fullfile(p,'example.txt');  

% 1-目录,0-文件
isp=isdir(p)  
isp=1

isf=isdir(f)  
isf=0

6、dir: 用于列出一个目录的内容,返回值为结构体数组类型

name:文件或目录的名称
date:修改日期
bytes:文件大小
isdir:是否是目录

p='D:\Matlab';  
files=dir(p) 

dir('.') 	列出当前目录下所有子文件夹和文件
dir('G:\Matlab') 列出指定目录下所有子文件夹和文件
dir('*.m') 	列出当前目录下符合正则表达式的文件夹和文件

结构体数组的结构体如下:
name -- filename
date -- modification date
bytes -- number of bytes allocated to the file
isdir -- 1 if name is a directory and 0 if not
datenum -- modification date as a MATLAB serial date number

7、cd:用于切换当前工作目录

cd('c:/toolbox/matlab/demos')  %切换当前工作目录到demos  
cd  ..  %切换当前工作目录到matlab 

8、pwd:用于当前工作目录的路径

pwd  
ans  =C:\MATLAB7\work 

9、path:用于对搜索路径的操作

path  		%查询当前所有的搜索路径(MATLABPATH)  
p=path    	%把当前的搜索路径存在字符串变量p中  
path('newpath')    		%将当前搜索路径设置为newpath  
path(path, 'newpath')  	%向路径添加一个新目录newpath  
path('newpath',  path)  %向当前搜索路径预加一个新目录nespath

10、addpath 和 rmpath: 用于对matlab搜索路径的添加和删除

addpath('direc')  %将完整路径direc加入到当前搜索路径的最顶端

11、what: 用于显示出某目录下存在哪些matlab文件;若输入完整路径,可列出指定目录下的文件

what('dirname')	 %dirname是要查找的路径的名字


GUI 对话框

1. 消息对话框

msgbox 函数(无输入,单击OK按钮后对话框自动关闭,返回程序中继续执行)

msgbox('欢迎使用MATLAB')   %建立一个没有标题的消息对话框
msgbox('欢迎使用MATLAB','MATALB','warn')  %% 建立一个有标题的消息对话框

2. 错误对话框

errordlg 函数

f = errordlg(msg)
f = errordlg(msg,title)
f = errordlg(msg,title,opts)
f = errordlg

e = errordlg;    %建立一个默认参数的错误对话框
e = errordlg('这是一个错误对话框','MATLAB error'); %建立一个名为MATLABerror的错误对话框

3.警告对话框

warndlg 函数

f = warndlg(msg)
f = warndlg(msg,title)
f = warndlg(msg,title,opts)
f = warndlg

w = warndlg; %建立一个默认参数的警告对话框
w = warndlg ('这是一个警告对话框','MATLAB warning');

4. 帮助对话框

helpdlg 函数

helpdlg
helpdlg(msg)
helpdlg(msg,title)
f = helpdlg(___)
h = helpdlg('你需要帮助吗?','MATLAB Help')

5. 进度条设置对话框

waitbar 函数: 作用是反映程序运行的完成情况

h=waitbar(0,'请稍等......')
for i=1:10000
    waitbar(i/10000)
end

6.输入对话框

inputdlg 函数

prompt={'输入梯形的上底:','输入梯形的下底','输入梯形的高'}; 	%设置提示字符串
name='Enter trapeaia Data'; 	%设置标题
numlines=1;	%指定输入数据的行数
defAns={'20','50','40'}; 	%设定默认值
Resize='on'; 	%设定对话框尺寸可调节
answer=inputdlg(prompt,name,numlines,defAns,'on'); 	%创建输入对话框

7. 列表对话框

listdlg 函数

p=path(path,'C:\MATLAB7\work');		%设置路径,若为当前目录,可以省略这一步
d=dir('C:\MATLAB7\work');	%获取指针,若为当前目录,则d=dir
str={d.name};	%获取目录内的文件名
[sel,ok]=listdlg('Liststring',str,'PromptString','请选择文件','SelectionMode','Multiple');	%创建列表对话框。

文件选择成功后,单击“OK‘按钮,系统将选择好的文件序号存入相应向量sel,参数ok的值为1。

8. 问题对话框

questdlg 函数: 提出一个问题,等待用户回答。默认回答按钮有:Yes、No、Cancel。当用户单击任何一个按钮时,系统将该按钮名保存在一个变量(ButtonName)中。若关闭对话框,则系统将ButtonName置为空。

ButtonName=questdlg('你准备好了吗?','MATLABquest','Yes','No','Cancel','Yes')

9. 路径选择对话框

questdlg 函数: 提出一个问题,等待用户回答。默认回答按钮有:Yes、No、Cancel。当用户单击任何一个按钮时,系统将该按钮名保存在一个变量(ButtonName)中。若关闭对话框,则系统将ButtonName置为空。

ButtonName=questdlg('你准备好了吗?','MATLABquest','Yes','No','Cancel','Yes')

10.选择文件对话框

uigetfile函数

[fn,pn,fi]=uigetfile('*.m','select aM-file')%打开一个选择M文件的对话框,并选择一个文件
[fn,pn,fi]=uigetfile(...
                    {'*.m;*.fig;*.mat;','All MATLAB File(*.m,*.fig,*.mat,*.mdl)';
                    '*.m','M-file(*.m)';...
                    '*.fig','Figure(*.fig)';...
                    '*.mat','MAT-flie(*.mat)';...
                    '*.mdl','Models(*.mdl)';...
                    '*.*','All Flies(*.*)'},...
                    'Pick a file')
            %打开一个选择多种文件的对话框,并选择一个文件

11.文件保存对话框

**uiputfile 函数 **

[fn,pn,fi]=uiputfile('*.m','Saveselected a M-file')
[fn,pn,fi]=uiputfile(...
                    {'*.m;*.fig;*.mat;','All MATLAB File(*.m,*.fig,*.mat,*.mdl)';
                    '*.m','M-file(*.m)';...
                    '*.fig','Figure(*.fig)';...
                    '*.mat','MAT-flie(*.mat)';...
                    '*.mdl','Models(*.mdl)';...
                    '*.*','All Flies(*.*)'},...
                    'Save a file')
               %建立多种保存文件的对话框,并选择一个文件

12. 页面设置对话框

pagesetupdlg 函数 用来设置页面的各种属性、参数。
该命令创建一个页面设置对话框,在该对话框用户可以设置页面的各种属性和参数。该命令只支持单一图形窗口的页面设置,参数fig也必须是单一的图形句柄,不可以是图形句柄向量或simulink图。

fig=figure;
dlg=pagesetupdlg(fig);	%调用格式为

13. 打印设置对话框

printdlg 函数 用户可以对各种打印参数进行设置

x=[-pi:0.02:pi];
y=cos(x);
fig=figure;
plot(x,y);
printdlg(fig);	%打开Windows打印对话框
printdlg('-crossplatform',fig);	%打开MATLAB打印对话框

14. 颜色设置对话框

uisetcolor 函数 用于用户设置图形的前景色或背景色

%建立一个颜色选择对话框
c=uisetcolor 
%建立一个颜色对话框,并设置对话框的初始颜色,然后选择一种颜色用于一个图形对象。
x=[0:0.02:2*pi];
y=sin(x);
h=figure;
plot(x,y);
c=uisetcolor(h,'select color')

15. 字体设置对话框

uisetfont 函数 用于设置或修改文本字体、坐标轴或设置控件对象的显示文本的字体属性

s=uisetfont    %建立一个默认字体设置对话框,并设置一种字体。
T1=uicontrol('style','pushbutton','string','确定',...
            'position',[200 320 6020]);                   %创建一个按钮
T2=uicontrol('style','pushbutton','string','取消',...
            'position',[200 220 6020]);                   %创建一个按钮
s=uisetfont(T1)                                           %打开字体设置对话框
set(T2,s)                                                 %将T1的设置复制到T2


随机数生成

1. 生成 m 行 n 列、参数 A1 , A2 , A3 分布的随机数

y = random('分布名称 ', A1, A2, A3, m, n)

R = random('Normal',0,1,2,4) %生成期望为 0,标准差为 1 的(2 行 4 列)2× 4 个正态随机数
R = random('Poisson',1:6,1,6)  %依次生成参数为 1 到 6 的(1 行 6 列)6 个 Poisson 随机数

2. rand 生成均匀分布的伪随机数 分布在 (0~1)

rand(m,n)生成m行n列的均匀分布的伪随机数

rand(m,n,'double')	%生成指定精度的均匀分布的伪随机数,参数还可以是'single'
rand(RandStream,m,n)	%利用指定的 RandStream 生成伪随机数

randn (m,n)生成标准正态分布的伪随机数(均值为0,方差为1)

randn(m,n,'double')	%生成指定精度的均匀分布的伪随机数,参数还可以是'single'
randn(RandStream,m,n)	%利用指定的 RandStream 生成伪随机数

3. randi 生成均匀分布的伪随机整数

X = randi(imax)
X = randi(imax,n)
X = randi(imax,sz1,...,szN)
X = randi(imax,sz)
X = randi(___,typename)
X = randi(___,"like",p)
X = randi([imin,imax],___)
X = randi(s,___)

4. 几何分布随机数

R = geornd(P)   	% 生成参数为 P 的几何随机数
R = geornd(P,m)  	% 生成参数为 P 的 × m 个几何随机数
R = geornd(P,m,n)  % 生成参数为 P 的 m 行 n 列的 m × n 个几何随机数

5. Beta 分布随机数

R = betarnd(A,B)  		% 生成参数为 A,B 的 Beta 随机数
R = betarnd(A,B,m)  	% 生成 × m 个数为 A,B 的 Beta 随机数
R = betarnd(A,B,m,n)   % 生成 m 行 n 列的 m × n 个数为 A,B 的 Beta 随机数

R = normrnd(0,1,[1 5])   % 生成 5 个正态(0,1) 随机数
R = normrnd([1 2 3;4 5 6],0.1,2,3) % 生成期望依次为[1,2,3;4,5,6], 方差0.1的 2×3个正态随机数

6. 正态随机数

R = normrnd(MU,SIGMA)  	% 生成均值为 MU,标准差为 SIGMA 的正态随机数
R = normrnd(MU,SIGMA,m)  	% 生成 1× m 个正态随机数
R = normrnd(MU,SIGMA,m,n) 	% 生成 m 行 n 列的 m × n 个正态随机数
R = normrnd(0,1,[1 5])  	% 生成 5 个正态(0,1) 随机数
R = normrnd([1 2 3;4 5 6],0.1,2,3) %  生成期望依次为[1,2,3;4,5,6], 方差为 0.1 的 2× 3 个正态随机数.

7. 二项随机数

R = binornd(N,P)  
R = binornd(N,P,m)   
R = binornd(N,p,m,n)

n = 10:10:60;
r1 = binornd(n,1./n)
r1 =
   0   1   1   2   2   0
   
r2 = binornd(n,1./n,[1 6])
r2 =
   0   1   0   1   3   0

8. 期望为 MU 的指数随机数

R = exprnd(MU)   
R = exprnd(MU,m)  
R = exprnd(MU,m,n)

9. 自由度为 V1、 V2 的 F 分布随机数

R = frnd(V1, V2)   
R = frnd(V1, V2, m)  
R = frnd(V1, V2, m, n)

10. gamma 随机数

r = gamrnd(a,b)
r = gamrnd(a,b,sz1,...,szN)
r = gamrnd(a,b,sz)

11. 超几何分布随机数

R = hygernd(M,K,N)
R = hygernd(M,K,N,m,n,...)
R = hygernd(M,K,N,[m,n,...])

12. lognrnd 对数正态随机数

r = lognrnd(mu,sigma) 	% 从分布参数 mu(对数值的均值)和 sigma(对数值的标准差)指定的对数正态分布生成一个随机数
r = lognrnd(mu,sigma,sz1,...,szN) % 生成对数正态随机数数组,其中 sz1,...,szN 指示每个维度的大小
r = lognrnd(mu,sigma,sz) % 生成对数正态随机数数组,其中向量 sz 指定 size(r)。

13. 负二项随机数

RND = nbinrnd(R,P)
RND = nbinrnd(R,P,m,n,...)
RND = nbinrnd(R,P,[m,n,...])

14. 泊松分布的随机数

r = poissrnd(lambda)  	% 从速率参数 lambda 所指定的泊松分布中生成随机数。lambda 可以是标量、向量、矩阵或多维数组。
r = poissrnd(lambda,sz1,...,szN) % 从具有标量速率参数lambda的泊松分布中生成随机数数组,sz1,...,szN 表示每个维度的大小。
r = poissrnd(lambda,sz) % 从具有标量速率参数 lambda 的泊松分布中生成随机数数组,其中向量 sz 指定 size(r)。

15. 瑞利分布

R = raylrnd(B)    
R = raylrnd(B,m)   
R = raylrnd(B,m,n)

16. V 个自由度的 t 分布的随机数

R = trnd(V)    
R = trnd(V,m)   
R = trnd(V,m,n)

17. 离散均匀分布的随机数

r = unidrnd(n)	  % 从由最大值 n 指定的离散均匀分布中生成随机数。n 可以是标量、向量、矩阵或多维数组。
r = unidrnd(n,sz1,...,szN) % 从标量最大值为 n 的离散均匀分布中生成一个随机数数组,其中 sz1,...,szN 表示每个维度的大小。
r = unidrnd(n,sz) % 从标量最大值为 n 的离散均匀分布中生成一个随机数数组,其中向量 sz 指定 size(r)。

18. [A,B] 上均匀随机数

R = unifrnd(A,B)   
R = unifrnd(A,B,m)  
R = unifrnd(A,B,m,n)
% 例: unifrnd(0,1:6)与 unifrnd(0,1:6,[1 6]) 都依次生成[0,1] 到[0,6]的6个均匀随机数.

19. 威布尔分布随机数

R = weibrnd(A,B)   
R = weibrnd(A,B,m)  
R = weibrnd(A,B,m,n)

  • 27
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值