MATLAB教程_04变数(变量)与档案存取_台大郭彦甫课程笔记

本文主要是介绍MATLAB教程_04变数(变量)与档案存取_台大郭彦甫课程笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MATLAB教程_04变数(变量)与档案存取_台大郭彦甫课程笔记

  • 一、变数/变量-string
    • 1、类型
    • 2、double 转 integer
    • 3、Character(Char)字元
  • 二、变数/变量-structure
    • 1、宣告举例——学生作业成绩:
    • 2、函数
    • 3、嵌套结构
  • 三、变数/变量-Cell Array 单元阵列
    • 1、宣告
    • 2、访问(读取) Cell Array 单元阵列
    • 3、函数
    • 4、怎样把矩阵转换成一个单元变量cell variable
    • 5、多维数组
    • 6、检查变量和变量状态
  • 四、File Access文件存取
    • 1、save()& load()
    • 2、电子表格读取:xlsread()
    • 3、电子表格写入:xlswrite()
    • 4、低级文件输入/输出

一、变数/变量-string

1、类型

1-1变量类型

变量类型含义
double()转换为双精度
single()转换为单精度
int8()转换为8位有符号整数
int16()转换为16位有符号整数
int32()转换为32位有符号整数
int64()转换为64位有符号整数
uint8()转换为8位无符号整数
uint16()转换为16位无符号整数
uint32()转换为32位无符号整数
uint64()转换为64位无符号整数

p.s.变数形态,当作function使用

2、double 转 integer

1-2-1变量转换
1-2-2命令新变量

>> B=int8(A)
B =int820

3、Character(Char)字元

指定一个Character到一个变数,用一个变数储存,用 单引号 来指定,把变数框在里面。

>> s1 = 'h'
whos
s1 ='h'Name      Size            Bytes  Class     AttributesA         1x1                 8  double              B         1x1                 1  int8                s1        1x1                 2  char                >> s1 = 'hex'
s1 ='hex'
>> whosName      Size            Bytes  Class     AttributesA         1x1                 8  double              B         1x1                 1  int8                s1        1x3                 6  char        

ASCII码表

>> s1 = 'h'
whos
uint16(s1)
s1 ='h'Name      Size            Bytes  Class     AttributesA         1x1                 8  double              B         1x1                 1  int8                s1        1x1                 2  char                ans =uint16104
>> s2 = 'H'
whos
uint16(s2)
s2 ='H'Name      Size            Bytes  Class     AttributesA         1x1                 8  double              B         1x1                 1  int8                ans       1x1                 2  uint16              s1        1x1                 2  char                s2        1x1                 2  char                ans =uint1672

4、String 多字元
宣告:

s1 = 'Example';
s2 = 'String';s3 = [s1 s2];
s4 = [s1; s2]; %加分号,变矩阵=============================
>> s1 = 'Example';
s2 = 'String';
>> s3 = [s1 s2]
s3 ='ExampleString'
>> s4 = [s1; s2]
错误使用 vertcat
要串联的数组的维度不一致。
%字符串长度不一样,不能放在一个矩阵中

5、逻辑运算和分配
许多数字和逻辑运算符可以应用于字符串

>> str = 'aardvark';
>> str(3)
ans ='r'>> str = 'aardvark';
>> 'a' == str
ans =1×8 logical 数组1   1   0   0   0   1   0   0
%每个位置分别做逻辑运算>> str(str == 'a') = 'Z'
str ='ZZrdvZrk'
%完成的功能是:将 a 都换为 Z
  • 练习1:
    练习:比较整个string和’aardvark’是否相等
    提示:strcmp-比较字符串
str_input = input('Please enter an  8-bit string: ','s');
str_judge = isempty(str_input);
str = 'aardvark';
if str_judge == 1disp('Invalid input');
elsefor i = 1:8result = str_input(i) ==  str(i);disp(result);i = i+1;end    
end============================================
>> class04_practice1
Please enter an 8-bit string: asdfghjk10000001
  • 练习2:编写一个脚本来反转任何给定的字符串
    s1=‘I like the letter E’
    ↓↓
    s2=‘E rettel eht ekil I’
str_input = input('Please enter a  string: ','s');
str_judge = isempty(str_input);
n = length(str_input); 
%length函数用来计算字符串的长度
if str_judge == 1disp('Invalid input');
elsestr = str_input;for i = 1:nstr(n-i+1) = str_input(i);i = i+1;end    
end
disp(str);
==============================================
>> class04_practice2
Please enter a string: I like the letter E
E rettel eht ekil I

二、变数/变量-structure

•一种存储异构数据的方法
•结构包含称为字段的数组

1、宣告举例——学生作业成绩:

1)基本
2-1-1结构数据宣告举例

student.name = 'John Doe';
student.id = 'jdo2@sfu.ca';
student.number = 301073268;
student.grade = [100, 75, 73; ...95, 91, 85.5; ...100, 98, 72];
student
student =包含以下字段的 struct:name: 'John Doe'id: 'jdo2@sfu.ca'number: 301073268grade: [3×3 double]
>> student.grade
ans =100.0000   75.0000   73.000095.0000   91.0000   85.5000100.0000   98.0000   72.0000

2)向结构添加信息
2-1-2在结构数据中添加信息

>> 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
student =包含以下字段的 1×2 struct 数组:nameidnumbergrade
  • 练习3:检索Ann Lane的第三个成绩
>> student(2).grade(3)
ans =100
>> student(2).grade(1,3)
ans =90

2、函数

函数名解释
cell2struct将单元数组转换为结构数组
fieldnames结构的字段名,或对象的公共字段
getfield结构阵列场
isfield确定输入是否为结构数组字段
isstruct确定输入是否为结构数组
orderfields结构数组的序域
rmfield从结构中删除字段
setfield为结构数组字段赋值
struct创建结构数组
struct2cell将结构转换为单元数组
structfun将函数应用于标量结构的每个字段

举例——

>> fieldnames(student)
ans =4×1 cell 数组{'name'  }{'id'    }{'number'}{'grade' }
>> student
student =包含以下字段的 1×2 struct 数组:nameidnumbergrade
>> rmfield(student,'id')
ans =包含以下字段的 1×2 struct 数组:namenumbergrade

3、嵌套结构

2-3-1嵌套结构

A = struct('data', [3 4 7; 8 0 1], 'nest', ...   %第一个file是一个string,第二个file是一个matrix,第三个file是一个string,第四个file另外一个structure(有4个file)struct('testnum' , 'Test 1', ...'xdata', [4 2 8],'ydata', [7 1 6]));%这样就是一个nesting structure嵌套结构
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.nest
ans =包含以下字段的 struct:testnum: 'Test 1'xdata: [4 2 8]ydata: [7 1 6]
ans =包含以下字段的 struct:testnum: 'Test 2'xdata: [3 4 2]ydata: [5 0 9]
>> A
A =包含以下字段的 1×2 struct 数组:datanest
>> A(1)
ans =包含以下字段的 struct:data: [2×3 double]nest: [1×1 struct]

三、变数/变量-Cell Array 单元阵列

存储异构数据(阵列)的另一种方法
类似于矩阵,但每个条目包含不同的数据类型
使用{ }声明
3-1单元阵列

1、宣告

1)第一种

>> 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 =2×2 cell 数组{3×3 double        }    {'Anne Smith'}{[3.0000 + 7.0000i]}    {1×3 double  }

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 =2×2 cell 数组{3×3 double        }    {'Anne Smith'}{[3.0000 + 7.0000i]}    {1×3 double  }

把 Cell Array 单元阵列当成一个指标(pointer),例如上述将a(1,1)指向一个矩阵,将a(1,2)指向一个字符串等。

  • 练习4:创建具有以下结构的单元数组B
    3-1-1练习4题目
>> B(1,1)={'This is the first cell'};
B(1,2)={[5+j*6 4+j*5]};
B(2,1)={[1 2 3; 4 5 6; 7 8 9]};
B(2,2)={["Tim","Chris"]};
B
B =2×2 cell 数组{'This is the first cell'}    {1×2 double}{3×3 double              }    {1×2 string}

2、访问(读取) Cell Array 单元阵列

>> A(1,1) %是说指到的内容是什么
ans =1×1 cell 数组{3×3 double}%要看cell array中的内容要用大括号
>> A{1,1}
ans =1     4     30     5     87     2     9%要知道矩阵中某一具体元素是多少
>> A{1,1}(1)
ans =1
>> A{1,1}(1,1)
ans =1
>> A{1,1}(1,3)
ans =3

3、函数

函数名解释
cell创建单元格数组
cell2mat将单元格数组转换为数字数组
cell2struct将单元数组转换为结构数组
celldisp单元格数组内容
cellfun对单元格数组中的每个单元格应用函数
cellplot单元阵列结构的图形显示
cellstr从字符数组创建字符串单元格数组
iscell确定输入是否为单元格数组
mat2cell将数组转换为具有不同大小单元格的单元格数组
num2cell将数组转换为大小一致的单元格数组
struct2cell将结构转换为单元数组

structure和cell可以做转化

4、怎样把矩阵转换成一个单元变量cell variable

num2cell
mat2cell
举例:将一个3×3矩阵变成一个3×3cell
3-4-1举例3*3单元变量
3-4-2举例3*3单元变量图示

%将每一个元素都独立变成cell里面的一个元素
>> a = magic(3)
b = num2cell(a)
a =8     1     63     5     74     9     2
b =3×3 cell 数组{[8]}    {[1]}    {[6]}{[3]}    {[5]}    {[7]}{[4]}    {[9]}    {[2]}%分组,三个列
被放在一起,三个行被分开
>> a = magic(3)
c = mat2cell(a, [1 1 1], 3)
a =8     1     63     5     74     9     2
c =3×1 cell 数组{1×3 double}{1×3 double}{1×3 double}

5、多维数组

3-5-1多维数组立体图解
3-5-2立体图解
1)基础宣告方法

A{1,1,1} = [1 2;4 5];
A{1,2,1} = 'Name';
A{2,1,1} = 2-4i;
A{2,2,1} = 7;
A{1,1,2} = 'Name2';
A{1,2,2} = 3;
A{2,1,2} = 0:1:3;
A{2,2,2} = [4 5]';
>> A2×2×2 cell 数组
A(:,:,1) ={2×2 double        }    {'Name'}{[2.0000 - 4.0000i]}    {[   7]}
A(:,:,2) ={'Name2'   }    {[       3]}{1×4 double}    {2×1 double}

2)concatenation串联:cat()
把两个矩阵这样接起来,就用到这个指令
3-5-3串联图解
3-5-4串联结构维度立体图解

>> 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)2×2×2 cell 数组
C(:,:,1) ={2×2 double        }    {'Name'}{[2.0000 - 4.0000i]}    {[   7]}
C(:,:,2) ={'Name2'   }    {[       3]}{1×4 double}    {2×1 double}

3)reshape(要改变的矩阵,改变后的行数,改变后的列数)
3-5-5改变矩阵行列的图解

>> A = {'James Bond', [1 2;3 4;5 6]; pi, magic(5)}
C = reshape(A,1,4)
A =2×2 cell 数组{'James Bond'}    {3×2 double}{[    3.1416]}    {5×5 double}
C =1×4 cell 数组{'James Bond'}    {[3.1416]}    {3×2 double}    {5×5 double}
  • 练习5:使用“reshape”从下面的矩阵A创建矩阵B。
>>  A=[1:3;4:6]
A =1     2     34     5     6
>> B=reshape(A,3,2)
B =1     54     32     6

6、检查变量和变量状态

is+function
3-6-1检查变量状态

四、File Access文件存取

4-1文件存取
•支持的文件格式:

文件内容扩展说明导入函数导出函数
MATLAB格式数据MAT保存的MATLAB工作区loadsave
Text空格分隔的数字loadsave
电子表格XLS,XLSXxlsreadxlswrite

1、save()& load()

1)将(所有)工作区数据保存到文件:

clear; a = magic(4);
save mydata1.mat
save mydata2.mat -ascii

举例——

>> clear; a = magic(4);
save mydata1.mat
>> a
a =16     2     3    135    11    10     89     7     6    124    14    15     1

4-1-1举例save功能
打开记事本可查看
4-1-2打开记事本查看save存储的内容
2)使用纯文字档案,可以编辑或阅读的档案,资料存储档案,后面要加 ascii
>> save mydata2.mat -ascii
4-1-3举例save函数存纯文字文档
打开记事本可查看
3-1-4打开记事本查看save函数的纯文字文档
3)加载存储在文件中的数据:
>> load('mydata1.mat')
3-1-5用MATLAB查看文件中的数据
4)加载存储在 ascii 文件中的数据:
>> load('mydata2.mat','-ascii')
3-1-6用MATLAB查看纯文字文件中的数据

  • 思考题1:如何保存特定变量?
save(filename,variables)

仅保存variables指定的结构体数组的变量或字段

2、电子表格读取:xlsread()

3-2-1举例要读取的电子表格

>> Score = xlsread('class04_practice_score.xlsx')
Score =94    83    8976    88    8268    72    75>> Score = xlsread('class04_practice_score.xlsx', 'B2:D4')
Score =94    83    8976    88    8268    72    75

3、电子表格写入:xlswrite()

1)举例——计算平均值并写入Excel电子表格

>> M = mean(Score')';
xlswrite('class04_practice_score.xlsx', M, 1, 'E2:E4');
xlswrite('class04_practice_score.xlsx', {'Mean'}, 1, 'E1');
%1”是表格1的意思

2)

  • 练习6:计算标准偏差并将其写入F列
>> N = std(Score')';
xlswrite('class04_practice_score.xlsx', N, 1, 'F2:F4');
xlswrite('class04_practice_score.xlsx', {'standard deviations'}, 1, 'F1');

3-3-1练习把标准差写到表格中
3)在MATLAB中读取标题
在MATLAB中,标题和数据是两种不同的变量,需要分开处理。

>> [Score Header] = xlsread('class04_practice_score.xlsx')
Score =94.0000   83.0000   89.0000   88.6667    5.507676.0000   88.0000   82.0000   82.0000    6.000068.0000   72.0000   75.0000   71.6667    3.5119
Header =4×6 cell 数组列 15{0×0 char}    {'Test1' }    {'Test2' }    {'Test3' }    {'Mean'  }{'John'  }    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}{'Selina'}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}{'Peter' }    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}6{'standard deviat…'}{0×0 char           }{0×0 char           }{0×0 char           }

3-3-2在MATLAB中读取表格中的标题
现在是两个变量,要怎样把这两个变量放在一起,然后储存回去,用xlsread写回去?

  • 思考题2:如何将文本和数字写入Excel文件?
>> for i = 2:4
for j = 2:6
Header{i,j} = Score(i-1,j-1);
j=j+1;
end
i=i+1;
end

3-3-3将变量写入表格运行结果图

4、低级文件输入/输出

•在字节或字符级别读写文件
•文件具有ID fid
•文件中的位置由可移动的指针指定
3-4-1指针制定文件中具体内容

FunctionDescription
fopen打开文件,或获取有关打开文件的信息
fclose关闭一个或所有打开的文件
fscanf从文本文件读取数据
fprintf将数据写入文本文件
feof文件结尾测试

1)打开和关闭文件:
3-4-2打开文件
2)举例——将正弦值写入文件A
3-4-3将正弦值写入文件A
思路:
1、生成 x,y
2、打开一个文件
3、把x,y写入文件
4、关闭文件

x = 0:pi/10:pi; 
y = sin(x); 
fid = fopen('class04_practice_sinx.txt','w');
for i=1:11fprintf(fid,'%5.3f %8.4f\n', x(i), y(i));
end
fclose(fid); 
type class04_practice_sinx.txt

3-4-5查看写入的文件
3-4-6在MATLAB中查看写入的文件
3)’%5.3f %8.4f\n’通过格式化I/O进行读写
3-4-7格式化I/O读写数据

符号含义
%c单个字符
%d十进制表示法(有符号)
%e指数记数法
%f定点表示法
%g%e或%f中更紧凑的
%o八进制表示法(无符号)
%s字符串
%u十进制表示法(无符号)
%x十六进制表示法

举例——从文件读取,检查是否为文件结尾:feof(fid)【视频:1:38:20】

这篇关于MATLAB教程_04变数(变量)与档案存取_台大郭彦甫课程笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530307

相关文章

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则