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

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

沁恒CH32在MounRiver Studio上环境配置以及使用详细教程

目录 1.  RISC-V简介 2.  CPU架构现状 3.  MounRiver Studio软件下载 4.  MounRiver Studio软件安装 5.  MounRiver Studio软件介绍 6.  创建工程 7.  编译代码 1.  RISC-V简介         RISC就是精简指令集计算机(Reduced Instruction SetCom

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个