各位如果看到博客内有广告,可以动手点一点,谢谢

MENU

Matlab—特殊变量类型与档案存取

November 21, 2018 • Read: 748 • matlab

Structure

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

student.name = 'John Doe';
student.id = 'jd2@sfu.ca';
student.number = 301073268;
student.grade = [100,75,73;95,91,85.5;100,90,72];

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

student(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+7iA(1,4)的位置存储一个1*3的矩阵

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)里面的内容

在这里我把花括号和圆括号展示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行一列的cell

c = mat2cell(a,[1 1 1],3)

cat()函数

之前讲的都只涉及到一维或二维,创建三维矩阵或者cell,就用cat()函数

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

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 里,所以我们这里涉及到两个操作,loadsave

save

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

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

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

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

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

load

xlsread

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

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

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

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

xlswrite

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

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

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

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

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

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

Archives Tip
QR Code for this page
Tipping QR Code