matlab学习:变量与档案存取

本文深入探讨MATLAB中的各种数据类型,包括数字型、字符型、字符串型、逻辑型、结构体和元胞数组,讲解了它们的特性和操作方法。同时,介绍了MATLAB中的文件读写操作,包括保存和加载MATLAB格式数据、读写Excel表格以及低层次文件的输入输出。
摘要由CSDN通过智能技术生成

1. matlab数据类型


在这里插入图片描述

  • 数字型默认为double,可以转换为其他数据类型
  • 字符:0-255的ASCII码存储;可以把字符或者字符串转化为数字型(ASCII)
 `s1 = 'h' 
  whos
  uint16(s1)
  • 字符串型:string 用字符数组表示;可以进行矩阵拼接。
`s1 = 'Example'; 
s2 = 'String';
s3 = [s1 s2];  %横向拼接
s4 = [s1; s2];%纵向拼接

2.逻辑运算符和赋值

  • 许多数字和逻辑运算符都适用于字符串。
str = 'aardvark'; 
str(str == 'a') = 'Z'

str = ‘ZZrdvZrk’

strcmp(str,'ZZrdvZrk')   %整个字符串进行比较

ans =

  logical

  • 小练习:
    在这里插入图片描述
s1='I like the letter E' ;
>> s2=s1(end:-1:1)

s2 =

    'E rettel eht ekil I'

>> s3=s1(length(s1):-1:1)

s3 =

    'E rettel eht ekil I'

>> s4=reverse(s1)

s4 =

    'E rettel eht ekil I'

3. 结构体

  • 存储复合数据类型
  • 通过.字段名 来访问字段
  • 使用下标来增加或删减结构体列表
    在这里插入图片描述
    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: 301073268
     grade: [3×3 double]


>> student.grade  %访问

ans =

  100.0000   75.0000   73.0000
   95.0000   91.0000   85.5000
  100.0000   98.0000   72.0000

>> student.grade(1,3)

ans =

    73
  1. 增加列表数
>> 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 数组:

    name
    id
    number
    grade

>> student.name

ans =

    'John Doe'


ans =

    'Ann Lane'
  1. 删除
student(1) = []		% 删除student列表第一项

student = 

  包含以下字段的 struct:

      name: 'Ann Lane'
        id: 'aln4@sfu.ca'
    number: 301078853
     grade: [3×3 double]
  • 结构体函数:
functionexplain
cell2struct把cell类型数组转化为结构体
fieldnames获取结构体的字段名
getfield获取结构体中具体的字段
isfield判断是否是结构体字段
isstruct判断是否为结构体
struct创建结构体
struct2cell把结构体转化为cell类型
structfun对结构体的每个字段都应用某函数
rmfield删除结构其中的某些字段
fieldnames(student)

ans =

  4×1 cell 数组

    {'name'  }
    {'id'    }
    {'number'}
    {'grade' }

 
>> getfield(student,'name')

ans =

    'Ann Lane'
rmfield(student,'id')

ans = 

  包含以下字段的 1×2 struct 数组:

    name
    number
    grade
  • 嵌套结构体
    结构体的成员又是一个结构体
    在这里插入图片描述
>> 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

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]

4.元胞数组(cell)

  • 类似于python中的列表,可以存储不同数据类型
  • 可以使用{}像定义矩阵一样定义元胞数组,并且可以包含不同数据类型
    在这里插入图片描述
clear 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 

A =

  2×2 cell 数组

    {3×3 double        }    {'Anne Smith'}
    {[3.0000 + 7.0000i]}    {1×3 double  }

>> clear 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

A =

  2×2 cell 数组

    {3×3 double        }    {'Anne Smith'}
    {[3.0000 + 7.0000i]}    {1×3 double  }
  • 获取cell的元素
    • 单元索引:()
    • 得到的是一个子元胞数组.
      
    • 内容索引:{}
    • 得到的是元胞数组对应区域中的内容.
      
  • cell函数
    在这里插入图片描述
  • num2cell()and mat2cell()
    • mat2cell()可以将数组转换为可能具有不同元胞大小的元胞数组
    • C = mat2cell(A,dim1Dist,…,dimNDist) 将数组 A 在元胞数组 C 中分为较小的数组。向量 dim1Dist,…dimNDist 指定如何划分行、列和更高维度的 A(如果适用)。
    • C = mat2cell(A,rowDist) 将数组 A 划分为 n×1 元胞数组 C,其中 n == numel(rowDist)。
    • 在这里插入图片描述
>> a = magic(3) %魔方矩阵
b = num2cell(a)%每个元素都转化为一个cell
c = mat2cell(a, [1 1 1], 3)%将a矩阵转换为cell:分为行数分为三块,其中一块一行;列数分为一块,其中一块三列。

a =

     8     1     6
     3     5     7
     4     9     2


b =

  3×3 cell 数组

    {[8]}    {[1]}    {[6]}
    {[3]}    {[5]}    {[7]}
    {[4]}    {[9]}    {[2]}


c =

  3×1 cell 数组

    {1×3 double}
    {1×3 double}
    {1×3 double}

6. 多维元胞数组

在这里插入图片描述

  • 三维的元胞数组可以有行(row),列(column),层(layer)三个维度.在对元胞数组进行索引时,优先级从高到低的顺序分别是: 行→列→层.
  • 可以通过索引来创建
    在这里插入图片描述
  • 可以使用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)

  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}
  • reshape() :改变数组形状,类似于python
A = {'James Bond', [1 2;3 4;5 6]; pi, magic(5)} 
C = reshape(A,1,4)

在这里插入图片描述

  • 判断变量和变量状态
    在这里插入图片描述

7.文件

在这里插入图片描述

1. 读写MATLAB格式的数据

  • MATLAB工作区内的数据可以以*.mat格式保存在文件中.使用save函数将数据存入文件,使用load函数从文件中读取数据.
  • save函数的语法如下:
    • save(filename,variables)
    • 将变量variables以二进制形式存入文件中.
      
    • save(filename,variables,’-ascii’)将变量variables以文本形式存入文件中.
 clear;  a = magic(4); 
save mydata1.mat 
save mydata2.mat -ascii
  • load函数的语法如下:
    • load(filename)从二进制形式文件中读取数据.
    • load(filename,’-ascii’)从文本形式文件中读取数据.
    • 其中参数filename和variables都是字符串格式,若不指定variables参数,则将当前工作区内所有变量存入文件中.
    • 复杂的数据格式,如struct和cell,不支持以二进制格式存储.
load('mydata1.mat')
 load('mydata2.mat','-ascii')

2. 读写Excel表格

  • 使用xlsread和xlswrite函数可以读写Excel数据,语法如下:
    • 读取Excel文件的语法:[num,txt,raw] = xlsread(filename,sheet,xlRange)
      在这里插入图片描述
Score = xlsread('04Score.xlsx') %默认读取数字
Score = xlsread('04Score.xlsx', 'B2:D4')
M = mean(Score')'; 
xlswrite('04Score.xlsx', M, 1, 'E2:E4'); xlswrite('04Score.xlsx', {'Mean'}, 1, 'E1');

低层次文件输入输出

  • 读取文件/写入文件都是以字符或者字节进行
  • 一个文件必须有一个fid
  • 文件中的坐标是通过一个一个可以移动的指针进行访问
    在这里插入图片描述
  • 函数功能:
    在这里插入图片描述
    在这里插入图片描述
x = 0:pi/10:pi; 
y = sin(x);  
fid = fopen('sinx.txt','w'); 
for i=1:11 
    fprintf(fid,'%5.3f %8.4f\n', x(i), y(i));
end
fclose(fid);  
type sinx.txt

在这里插入图片描述

  • 读写文件都是通过固定的I/O格式
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值