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 数组列 1 至 5{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变数(变量)与档案存取_台大郭彦甫课程笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_45433350/article/details/113398826
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/530307

相关文章

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑

在idea中使用mysql数据库超详细教程

《在idea中使用mysql数据库超详细教程》:本文主要介绍如何在IntelliJIDEA中连接MySQL数据库,并使用控制台执行SQL语句,还详细讲解了如何使用MyBatisGenerator快... 目录一、连接mysql二、使用mysql三、快速生成实体、接口、sql文件总结一、连接mysql在ID