matlab学习笔记(三)变量与档案存取


参考课程:台大郭彦甫教授MATLAB课程

变量(进阶)

在这里插入图片描述

数据类型转换

在这里插入图片描述

Char

在这里插入图片描述

String

在这里插入图片描述
在这里插入图片描述

对string进行操作

如:
【例1】
在这里插入图片描述
【例2】

在这里插入图片描述
【注】如果想要比较整个字符串,可用strcmp()函数进行判断,两字符串相同返回1,不同则返回0
在这里插入图片描述
【练习1】
字符串反转1:采用for循环操作索引

s1 = 'I like the letter E';
s2 = [];
whos;
for i=1:size(s1,2)
    s2(size(s1,2)-i+1) = s1(i);
end
disp(char(s2));

在这里插入图片描述

字符串反转2:直接采用reverse()方法

s1 = 'I like the letter E';
s2 = reverse(s1);
disp(s1);
disp(s2);

在这里插入图片描述

Structure(类似C语言的结构体)

student.name = 'Stefan';
student.id = 'jdfffooo.cc';
student.number = 3929844;
student.grade = [100,75,73;...
                95,91,85.5;...
                100,98,72];
student

在这里插入图片描述
可通过索引查找对应内容并且不断扩充结构体的内容,比如再添加第二个学生的信息:
在这里插入图片描述
【练习2】找到第二个学生的第三门成绩
在这里插入图片描述
结构体相关函数

函数名说明
cell2struct将元胞数组转换为结构体数组
fieldnames返回元胞数组中结构体数组的各个字段名称
getfield返回结构体中指定字段的值
isfield判断输入的字段是否是结构体里的
isstruct判断输入的是否是结构体
orderfields给指定结构体中的字段按名称(ASCII码)排序
rmfield删除结构体中指定的字段
struct创建结构体数组放到变量中
struct2cell将结构体数组转换为元胞数组
structfun对标量结构的每个域应用函数,返回任何数据类型的数组

在这里插入图片描述

嵌套结构

在这里插入图片描述

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.nest

在这里插入图片描述
在这里插入图片描述
嵌套结构:

  • structure A:
    • string ‘data’
    • matrix [3 4 7;8 0 1]
    • string ‘nest’
    • structure:
      • string ‘testnum’
      • string ‘Test 1’
      • string ‘xdata’
      • matrix [4 2 8]
      • string ‘ydata’
      • matrix [7 1 6]

Cell Array(元胞数组)

Cell Array,元胞数组,每个元胞都可以包含任意类型的数据,用 { } 进行声明。

两种声明方法

  1. ( ) = { }:
A(1,1) = {[1 4 3;0 5 8;7 2 9]};
A(1,2) = {'Stefan'};
A(2,1) = {3 + 7i};
A(2,2) = {-pi:pi:pi};
A
  1. { } = ( )
A{1,1} = [1 4 3;0 5 8;7 2 9];
A{1,2} = 'Stefan';
A{2,1} = 3 + 7i;
A{2,2} = -pi:pi:pi;
A

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【练习3】
在这里插入图片描述

A{1,1} = 'This is the first cell';
A{1,2} = [5+j*6 4+j*5];
A{2,1} = [1 2 3;4 5 6;7 8 9];
A{2,2} = ['Tim','Chris'];
A

在这里插入图片描述
区别 A(2,1) and A{2,1}:
在这里插入图片描述
如何取得某一元胞中的矩阵的某一个数?

如,
花括号找到对应矩阵,再圆括号进行索引查找:
在这里插入图片描述
元胞数组相关函数

函数名说明
cell创建元胞数组,用 { }
cell2mat将元胞数组转换为基础数据类型的普通数组
celldisp显示元胞数组内容
cellfun对元胞数组中每个元胞应用函数,各自返回对应函数的结果
cellplot以图形方式显示元胞数组的结构体
cellstr转换为字符向量元胞数组
iscell判断输入是否是元胞数组
mat2cell将数组转换为在元胞中包含子数组的元胞数组
num2cell将数组转换为相同大小的元胞数组

matrix --> cell

  • num2cell():将数组转换为相同大小的元胞数组

在这里插入图片描述
【注】magic(n):生成一个n*n的幻方矩阵

  • mat2cell():将数组转换为在元胞中包含子数组的元胞数组
    • 参数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); % layer层拼接起来

在这里插入图片描述
reshape()函数:改变矩阵的维度
在这里插入图片描述
【练习4】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文件(File)的相关操作

在这里插入图片描述

  • 读写Matlab文件
  • 读写Excel表格

load() 和 save()

  • save mydata1.mat:以二进制形式保存到文件
  • save mydata2.mat -ascii:将数据以文本形式保存到文件

在这里插入图片描述
在这里插入图片描述

  • load(‘mydata1.mat’)
  • load(‘mydata2.mat’,’-ascii’)

加载文件到工作空间
在这里插入图片描述
在这里插入图片描述
【存储特定的变量到工作空间】

  • save(filename,variables)
  • save(filename,variables,’-ascii’)

Excel File Reading:xlsread()

如,读取一个Excel文件Score.xlsx:
在这里插入图片描述

  • Scores = xlsread(‘Score.xlsx’):读取所有
  • Scores = xlsread(‘Score.xlsx’,‘B2:D4’):读取Excel中特定范围内的数据

在这里插入图片描述
在这里插入图片描述

Excel File Writing:xlswrite()

  • xlswrite(‘Score.xlsx’,M,1,‘E2:E4’);
  • xlswrite(‘Score.xlsx’,{‘Mean’},1,‘E1’);

【练习5】计算平均值,算标准差,并写入到Score表格新的列中

M = mean(Scores')';
xlswrite('Score.xlsx',M,1,'E2:E4');
xlswrite('Score.xlsx',{'Mean'},1,'E1');
S = std(Scores')';
xlswrite('Score.xlsx',S,1,'F2:F4');
xlswrite('Score.xlsx',{'Std'},1,'F1');

在这里插入图片描述
通过Header提取数据的属性名(标题)的部分:

[Scores Header] = xlsread('Score.xlsx')

在这里插入图片描述
【练习6】将整个表格的所有数据都写入一个完整表格中,包括每一项数据的标题部分和数值部分

[Scores Header S] = xlsread('Score.xlsx');
xlswrite('test_Score.xlsx',S)
  • Scores:只提取数值部分,头部标题为空
  • Header:只提取头部标题,数值部分为空
  • S:包含头部标题+数值部分

在这里插入图片描述

文件读写操作

在这里插入图片描述

写入操作

fid = fopen(’[filename]’,’[permission]’);(r、r+、w、w+、a、a+)
在这里插入图片描述

读取操作

fid = fopen('asciiData.txt','r');
i = 1;
while ~feof(fid)
    name(i,:) = fscanf(fid,'%5c',1);
    year(i) = fscanf(fid,'%d',1);
    no1(i) = fscanf(fid,'%d',1);
    no2(i) = fscanf(fid,'%d',1);
    no3(i) = fscanf(fid,'%g',1);
    no4(i) = fscanf(fid,'%g\n');
    i = i + 1;
end
fclose(fid);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值