郭彦甫Matlab第三节笔记(变量与档案存取)

目录

1.Variables:string、structure、cell

1.1Matlab Data Types

1.2 char

1.3string  多字元

1.4 logical operations and assignments   逻辑运算和赋值

1.5 structure

1.6 structure function补充

1.7 nesting structure 嵌套结构

1.8 cell array

1.9 accessing cell array

1.10 cell array functions

 1.11 补充知识  multidimension array

1.11.1cat();即concatenation;

 1.11.2 reshape()

 1.11.3 检查变量和变量的状态

2.Data access

2.1file  access

2.1.1 save()and  load()

2.1.2 excel file reading

2.1.3 excel file writing

 2.1.4 getting text

2.2 难一些的文件输入/输出

2.2.1 功能运用:fprintf (writing sine values into file)

2.2.2 fcanf 


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为止;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值