matlab中的lanenum函数,Matlab—特殊变量类型与档案存取

Structure

Structure即结构。举个例子,有一个学生的结构,包含姓名、邮箱、学号、成绩

b1ba1f088f2f1a464a0829e2209db88b.pngstudent.name = 'John Doe';

student.id = 'jd2@sfu.ca';

student.number = 301073268;

student.grade = [100,75,73;95,91,85.5;100,90,72];

structure的作用可不止这么点,假如学生不止一个人,有多了个学生

b58e7fc43374c92b5dc10d7840c6e0dc.pngstudent(2).name = 'Ann Lane';

student(2).id = 'aln4@sfu.ca';

student(2).number = 301078853;

student(2).grade = [95 100 90;95 82 97;100 85 100]

其实就是在student后面用括号括起来加个数字

其实structure还有很多用法,比方说我要显示名为"Ann Lane"的学生的第三个成绩,也就是90,可以使用student(2).grade(7)或student(2).grade(1,3)

cell array

cell有点类似矩阵,但是矩阵的每个位置存储的都是数值,而cell的每个位置可以用来存储不同类型的值,比方说,A(1,1)的位置存储一个3*3的矩阵,A(1,2)的位置存储一个string类型的字符串,A(1,3)的位置存储一个复数3+7i,A(1,4)的位置存储一个1*3的矩阵

536da01fd7fccf16d94b7a8930bcab75.png

cell的定义代码有点类似于structure,有两种定义方式A(1,1) = {[1 4 3;0 5 8;7 2 9]};

A(1,2) = {'Anne Smith'};

A(2,1) = {3 + 7i};

A(2,2) = {-pi:pi:pi};A{1,1} = [1 4 3;0 5 8;7 2 9];

A{1,2} = 'Anne Smith';

A{2,1} = 3 + 7i;

A{2,2} = -pi : pi : pi;

通过上面两种代码可以看到,无论是哪种方式,都必须要用{},花括号是至关重要的。

现在我要显示A(1,1)里面的内容

53e89733a256aa0495af6970451b4f43.png

在这里我把花括号和圆括号展示cell内容的代码都写出来,好让读者区分,圆括号只会告诉你cell这个位置存储的是个什么类型的值,而花括号会给你展示这里面值得内容

num2cell()函数

num2cell()函数的作用是将一个矩阵转换为相同行列数的cell类型,下面我们首先用magic(n)函数创建一个魔方矩阵(每行、列、对角线上数的和相等,并且该和的值为$\frac{1+2+...n^2}{n}$,n必须党羽等于3)a = magic(3)

b = num2cell(a)

$$

A =

\left[

\begin{matrix}

8 & 1 & 6 \\

3 & 5 & 7 \\

4 & 9 & 2

\end{matrix}

\right]

$$

$$

A =

\left[

\begin{matrix}

[8] & [1] & [6] \\

[3] & [5] & [7] \\

[4] & [9] & [2]

\end{matrix}

\right]

$$

mat2cell()函数

假如不想一个一个将矩阵内的值转换成cell,而是想一块一块的转换,比方说以行为单位,一行一行的转换成cell,转换成3行一列的cellc = mat2cell(a,[1 1 1],3)

cat()函数

之前讲的都只涉及到一维或二维,创建三维矩阵或者cell,就用cat()函数A = [1 2;3 4];

B = [5 6;7 8];

C = cat(3,A,B);

483d9ccfa5f6fde263a2988f7ad3014c.png

reshape()函数

reshape()函数的作用是将一个$i*j$的矩阵转换为$i_{new}*j_{new}$的矩阵,前提条件是$i*j = i_{new}*j_{new}$A = {'James Bond',[1 2;3 4;5 6]; pi,magic(5)};

C = reshape(A,1,4);

reshape()函数里的三个参数,第一个是需要转换的矩阵的名字,第二个是需要转换的行数,第三个数需要转换的列数

File Access

们有时候需要把计算完的 workspace 里的 data 存储为档案,或者是将存储的档案读取到 workspace 里,所以我们这里涉及到两个操作,load和save

save

save的含义是:Save (all) workspace data to a file

首先创建一个4*4的矩阵,然后通过save函数将其保存

115554f26e7755f1a49f2f3fc5428f19.png

当我们输入代码之后,workspace 里的所有数据都被保存了指定的文件夹下,现在看看能不能通过记事本打开 data1

9d7f087dd9d8e91ed1d9dd477363eb80.png

通过记事本打开,里面的内容并不是矩阵的数值,而是一些相关信息,如果想保存为记事本也能打开的格式需要用这段代码save data2.mat -ascii,在代码后买你加上-ascii即可

如果不是想保存workspace里的所有变量,只是想保存某一个或者某一些,只要鼠标右键这个变量,另存为即可

load

3137bfa450e0b8c1c5a4ecad0f0b0280.png

xlsread

xlsread()函数主要是用于读取excel文件的内容。我现在有这样一个excel文件

742f166f400b8ff3a853c289c00213e1.png

通过代码score = xlsread('04Score.xlsx'),那么matlab就会把整个excel内的数据全部读进来?不对,其实matlab在读excel 内的数据时会将数值和 string 类型的字符串分开来,只会读数值

e88e08b0402e294ef3467fad16e02468.png

因为excel里有坐标,每个单元格都有其位置,比方说94,他的位置就是B2,因此可以选定一个区域进行读取score = xlsread('04Score','C3:D4')

因为matlab矩阵里面只能有数值类型的变量,所以不会读入string类型,但是可以分开读

e351c0c45717f63cb37508592e0ef1e4.png

xlswrite

xlswrite()函数的作用是写入 excel。我们把刚才从 excel 中读入进来的数据,算他们每个人的平均数,然后再写入他们每个人的成绩的后一列。

首先是计算平均数,算平均数的函数是mean(),mean()计算平均数时是一列一列算的,但是这里我们应该一行一行算,所以代码应该是:mean(score')

创建一个矩阵,默认是一行多列,但是我们现在需要的是多行一列,所以还需要在mean()函数的后买你再次转置,然后再写入excelM = mean(score')';

xlswrite('04Score.xlsx',M,1,'E2:E4');

在写入的时候,excel是不能开着的

最后总结一下xlswrite()函数的格式:xlswrite('filename',variable,sheet,'location'),"sheet"的含义是excel的第几页

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值