目录
1.Variables:string、structure、cell
1.4 logical operations and assignments 逻辑运算和赋值
1.11 补充知识 multidimension array
2.2.1 功能运用:fprintf (writing sine values into file)
1.Variables:string、structure、cell
1.1Matlab Data Types
int8是指后面有8个字节,其他类似;
double是default的;
关于转换数据类型:
就可以啦;
1.2 char
以下涉及到ASCII码;h对应104;
如果在变量中只有一个字元的话,就是char了;那多个嘞?
1.3string 多字元
直接上例子啦;
上下字符数量不一致不可以分号强加在一起哦;
1.4 logical operations and assignments 逻辑运算和赋值
数字和逻辑运算被应用于string;
‘a’==str可以看哪个位置等于a,如下。可知第1、2、6符合条件;
知道这个了然后嘞?我们可以将z赋值给前面的串为1的位置;
前面都是单个对比的操作,如果今天想要整个字符串进行对比怎么办呢?
练习
1.5 structure
1.储存异值数据的方法;
2.包含文档内容;
例:此处grade没有显示出来;只需要student.grade即可显示;
补充信息;
小练习:检索第二个学生的第三个成绩;
直接student(2).grade(1,3)或者student(2).grade(7)
1.6 structure function补充
具体可以干嘛嘞?fieldnames:把field提取出来;
rmfield:去除某个field;
1.7 nesting structure 嵌套结构
就是一个structure里面还有一个structure
struct(字段1,信息1,字段2,信息2.。。。)等同于
struct(field的名称,field的内容;。。。)
A=struct('data',[3 4 7;8 0 1],'nest',...
struct('testnum','Test 1',...
'xdata',[4 2 8],'ydata',[7 1 6]));
A(2).data=[9 3 2;7 6 5];
A(2).nest.testnum='Test 2';
A(2).nest.xdata=[3 4 2];
A(2).nest.ydata=[5 0 9];
代码如上,我们先来看看A
看看A.data的内容
看看A.nest的内容
1.8 cell array
1.也是储存异值数据的方法;
2.相似于矩阵但是每个阵列有单独的数据类型;
为了什么呢?为了能有这样子的分块矩阵:
展示如下。
第一种宣告类型,大括号放在后面;
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
第二种宣告类型,大括号放在前面;
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
为什么这么奇妙嘞?
cell中的每一个元素都拥有一个指针,指向不同的数据类型;
1.9 accessing cell array
A(1,1)可以用来显示指针指向的数据类型;
A{1,1}可以得到具体的内容;
那我该如何获得具体里面的某个数呢?
就可以啦!
1.10 cell array functions
structure和cell可以相互转换;
例如cell2struct可以将cell转换成structure;
很有趣的一个现象就是如何将matrix转成cell;
num2cell:
mat2cell:
意思就是a分成[1 1 1]3个行,每个行有3个列;
3个column被放在一起,3个row还是分开来;这个cell里面有三个array;
1.11 补充知识 multidimension array
row、column、layer
A{1,1,1}=[1 2 ;4 5];
A{1,2,1}=‘name’;
A{2,1,1}=2-4i;
A{2,1,2}=7;
A{1,1,2}=‘name2’;
A{1,2,2}=3;
A{2,1,2}=0:1:3;
A{2,2,2}=[4 5];
前面用大括号来宣告;
则举例运行如下,可以看看;
但是多了以后就很复杂,所以我们用下面这个方式来表达;
1.11.1cat();即concatenation;
A=[1 2;3 4];
B=[5 6;7 8];
1就是行着拼;2就是竖着拼;3是图层拼;
接下用cat()指令来拼图层;
A{1,1}=[1 2;4 5];
A{1,2}='name';
A{2,1}=2-4i;
A{2,2}=7;
B{1,1}='name2';
B{1,2}=3;
B{2,1}=0:1:3;
B{2,2}=[4 5]';
C=cat(3,A,B)
运行结果如下;
1.11.2 reshape()
reshape可以将左边变成右边的,条件是r1c1=r2c2;
A={‘James Bond’,[1 2;3 4;5 6]; pi,magic(5)}
C=reshape(A,1,4)
即可以将2*2的转换成1*4的;
运行如下:
练习!
A=[1:3;4:6];
B=reshape(A,3,2)
1.11.3 检查变量和变量的状态
这个可以检测变量是不是某种类型;
如果是某种类型的话,则结果为1;
2.Data access
2.1file access
我们需要知道如何把work space里的数据放到file里;同时也想把file里的东西读取到work space;
2.1.1 save()and load()
先来save
代码如下:
clear; a=magic(4);
save mydata1.mat
这样子下面就会有这个东西啦;
但是打开以后发现,乱码啦!(被压缩了)
那我们就需要save mydata2.mat -ascii(如果要阅读、编辑的档案,就需要加ascii)
这样子就完全是把work space 储存到了file;
那我们想要file到work space 就要用到load啦;
程序运行如下:
load('mydata1.mat')
load('mydata2.mat','-ascii')
小练习:
怎样去储存一个特殊的变量?
例:存储变量A到一个文件名为varibleA的文件中:
save('varibleA','A');
为了能看到数据:
save('varibleA','A','-ascii');
以下还可以直接存储成txt格式:
save('varibleA.txt','A','-ascii');
2.1.2 excel file reading
读取excel内容:
Score= xlsread('04Score.xlsx')后面‘’里是文件名;
读取指定位置的内容:
Score1=xlsread('04Score.xlsx','B2:D4')
2.1.3 excel file writing
要求:计算所给数的平均值同时写入excel;
这里的两个转置是什么意思呢?因为平均数算的时候呢,一列一列算的,但是这个表里每个同学分数是一行一行的,那么需要转置一下算mean,然后算完以后在转置一下,就可以把mean的结果放在后面了;
运行前两行就可以在这些数后面得到他们的平均数;
第三行是给这个平均值加一个标题;—— 名字是Mean、在表1、位置是E1。
练习:计算标准差;
首先,计算转置矩阵的标准差;为了对应(与上面原因相同),需要转置两次;
然后
xlswrite('04Score.xlsx',Var,1,'F2:F4');
xlswrite('04Score.xlsx',{'Var'},1,'F1');
再次打开excel,就可以看到变化啦!
2.1.4 getting text
那我们不光光想要数字可咋办嘞?
[score header]=xlsread(‘04Score.xlsx’)
score用来存放数字;header用来存放表头;
value是cell类型的哦;因为cell可以储存一大串的各种字符和字串;
那我们如何反过来把score和header放到表里呢?
练习:
新建一个excel:loadtext
写入程序
xlswrite('loadtext.xlsx',header,1,'A1')
xlswrite('loadtext.xlsx',score,1,'B2:F4')
2.2 难一些的文件输入/输出
1.在字节或字符级别读写文件
2.一个文件有一个fid(file id)
3.要有指针
功能展示如下:
2.2.1 功能运用:fprintf (writing sine values into file)
把work space里的内容写到file里面;步骤:
1.创造x、y
2.open a file
3.write x 、y into file
4.close the file
x=0:pi/10:pi;
y=sin(x);
fid = fopen('sin.txt','w');
for i=1:11 fprintf(fid,'%5.3f %8.4f\n',x(i),y(i));
end fclose(fid);
type sin.txt
运行结果如下:
%5.3f就是五个有效数字,三个小数点;
其中内容的格式:
2.2.2 fcanf
程序一行接着一行的执行,执行到end of file为止;