Matlab基础知识--操作命令、快捷键、dir、eval、strcmp、cell、多维数组

一、常用的操作命令

cd设置当前工作目录

md创建目录

dir列出指定目录下的文件和子目录清单

 

exit关闭/退出MATLAB

quit关闭/退出MATLAB

 

clf清除当前图形窗口内的图形

clc清除命令窗口的显示内容

close关闭指定图形窗口

clear清除MATLAB工作空间中保存的变量

 

whos显示工作空间中的所有变量信息

more使其后显示的内容分页进行

type显示指定M文件的内容

 

二、常用快捷键

↑调出前一个输入的命令

↓调出后一个输入的命令

←光标左移一个字符

→光标右移一个字符

Ctrl+←光标左移一个单词

Ctrl+→光标右移一个单词

Home光标移至行首

End光标移至行尾

Esc清除当前行

Del清除光标所在位置后面的字符

Backspace清除光标所在位置前面的字符

F9运行选中命令

Ctrl+k删除光标之后到行尾的所有字符

Ctrl+c中断正在执行的命令

Ctrl+d打开当前变量或函数文件

Ctrl+0打开Command  Window:

Ctrl+1打开Command  History:

Ctrl+2打开Current  Folder

Ctrl+3打开Workspace

Ctrl+R注释选中的内容

Ctrl+T 将选中的被注释的语句删除注释

 

三、dir函数用法

dir函数可以获得指定文件夹下的所有子文件夹和文件,并存放在一个文件结构的数组中,这个数组各结构体内容如下:

name    -- 文件名

date    -- 修改日期

bytes   -- 文件大小

isdir   -- 目录是1,不是为0

datenum -- matlab中特定的修改日期

 

使用方法:

dir ( ' . ' )  列出当前目录下的所有子文件夹和子文件

dir ( ' G:\Matlab ') 列出指定目录下的所有子文件夹和文件

dir( ' *.m' )列出当前目录后缀是.m文件的所有文件

 

四、eval用法

eval的功能简单来说就是可以把字符串当做命令来执行。

看到有人举的例子:eval('y=sin(1)')与命令 y=sin(1)等价

 

eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,当然你可以写三行:

xlswrirte('data1.xlsx',data1)

xlswrirte('data2.xlsx',data2)

xlswrirte('data3.xlsx',data3)

但是假如现在有1000个这种data1,data2,...,data1000呢,这个时候就体现了eval的长处,我们也可以只用三行:

for i=1:1000

eval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])

end

%注意上面的eval语句语句中第一个data前面有两个'',xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!

%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况

 

五、strcmp函数用法

strcmp是用于做字符串比较的函数,按复杂程度及比较对像的不同主要可以分为以下三种情况:

1. TF=strcmp(s1,s2);

 s1和s2是字符串,比如:s1=‘hello’,s2='matlab'。

    如果s1和s2是一致的(identical),则返回值TF=1,否则,TF=0。

 

2. TF=strcmp(s,c);

    s是一个字符串,the c is a cell array,c的元素全是字符串,比如:s=‘hello’,c={'hello','matlab';'HELLO','matlab'}。

    返回值TF是一个和c有相同size的logical array,TF的元素是1或0。

 

3. TF=strcmp(c1,c2);          

    c1和c2都是cell arrays,并且它们具有相同的size,它们的元素都是字符串,比如c1={'hello','matlab';'HELLO','matlab'};c2={'hello','matlab';'hello','MATLAB'};

    返回值TF是一个和c1或c2有相同size的logical array,TF的元素是1或0。

    把c1和c2对应位置的元素做比较,如果一致,则TF对应位置的元素为1,否则,为0。

 

六、cell数组

cell数组一般被叫做元胞数组,它的每个单元可以储存不同的数据类型,可以是数值,字符或矩阵或元胞数组等,类似于学过的c语言里的结构体

1.cell数组的创建

可以直接通过{}类似于矩阵的直接赋值:a={'winter',123,'coming','哈哈'};

也可以通过cell函数预分配内存,再赋值:a=cell(1,4);a={'winter',123,'coming','哈哈'};

 

2.cell数组的访问

与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容,举例如下图所示,其他操作基本一样。

                                                           

3.cell数组相关的函数

cell:创建空的元胞数组,预分配内存

celldisp:显示元胞数组所有内容

cellplot:利用图形方式显示内容

                                   

cell2mat:将元胞数组成普通矩阵(要求cell元胞数组的所有内容都必须为相同数据类型,可以为字符,会转化为字符矩阵)

mat2cell:将普通矩阵转化成元胞数组

iscell:判断输入是否为元胞数组

cellfun:为cell数组的每个cell单元的内容执行指定的函数,fun可以是特殊的函数或者句柄

 

官网解:释A = cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞。然后 cellfun 将 func 的输出串联成输出数组 A,因此,对于 C 的第 i 个元素来说,A(i) = func(C{i})。输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。数组 A 和元胞数组 C 具有相同的大小。

 

默认情况下,cellfun 将 func 的输出串联成数组。func 必须返回标量。如果 func 返回对象,则对象所属的类必须满足以下要求。

(1)支持通过对象数组的线性索引进行赋值

(2)具有一个 reshape 方法,可返回与输入大小相同的数组

如果 'UniformOutput' 名称-值对组参数的值为 false (0),则 cellfun 将以元胞数组形式返回输出。在这种情况下,func 的输出可以具有任意大小和不同的数据类型。

matlab官网:https://ww2.mathworks.cn/help/matlab/ref/cellfun.html

b={[1,2,1];[2,1,1];[1,1,2]};

c=cellfun(@(x)(mat2str(x)),b,'un',0)

                                              

 

更一般的例子参见https://cn.mathworks.com/matlabcentral/answers/99632-how-do-i-save-a-cell-array-that-contains-both-strings-and-numbers-to-an-ascii-file-in-matlab

 

4.cell单元的删除

我们知道矩阵及矩阵的删除可以通过[]实现:

                                                               

元胞数组操作类似但和其赋值一样有区别,区别就在于{}和()

a={1,2,3};

a{1}=[];%并不能删除第一个cell单元,只是变成空值

a(1)=[];%删除第一个单元

                                                              

a(:)=[];%一次性删除所有cell单元

 

七、Matlab中多维数组的建立及使用

1.首先建立三维数组,和二维数组一样,先建立一个3*3的数组,然后添加一个三维数组,使用如下方式:

A = [5 7 8;   0 1 9;   4 3 6];

A(:,:,2) = [1 0 4;   3 5 6;   9 8 7]

                                     

 

2.还有一种方式就是使用cat函数,例如:

B = cat( 3, [2 8; 0 5], [1 3; 7 9], [2 3; 4 6])

显示结果如图:

                                           

 

3.那么如何查看当前多维数组的维数及大小呢?可以直接使用SIZE 和NDIMS进行查看,如图:

                                                

 

4.查看并选择对应的元素,可以通过下标来选择,如图:

                                     

 

5.那么如何操控多维数组呢?通过下面方式就知道了。

A = rand(3,3,2);

B = permute(A, [2 1 3]);

C = permute(A, [3 2 1]);

                                       

 

6.还可以从多维数组中选择二维数组,示例脚本如下:

 

A = cat( 3, [1 2 3; 9 8 7; 4 6 5], [0 3 2; 8 8 4; 5 3 5], ...   [6 4 7; 6 8 5; 5 4 3]);% The EIG function is applied to each of the                                                                                                                                           horizontal 'slices' of A.

for i = 1:3 

     eig(squeeze(A(i,:,:)))

end

                                              

7.最后就是创建示例图片,可以使用如下脚本:

x1 = -2*pi:pi/10:0;

x2 = 2*pi:pi/10:4*pi;

x3 = 0:pi/10:2*pi;

[x1,x2,x3] = ndgrid(x1,x2,x3);

z = x1 + exp(cos(2*x2.^2)) + sin(x3.^3);

slice(z,[5 10 15], 10, [5 12]); axis tight

                                             

转自:

https://blog.csdn.net/vainfanfan/article/details/72611735
https://blog.csdn.net/qq_38412868/article/details/79185883
https://blog.csdn.net/feitianziyouaoxiang/article/details/46492111
https://blog.csdn.net/qq_38412868/article/details/79303083
https://jingyan.baidu.com/article/2f9b480de8a64941ca6cc251.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值