MATLAB变数(变量)与档案存取

目录

前言

一、变量

1.变量(数据)类型转换

2.char

3.String

逻辑运算和分配

Exercise

4.stucture

创建结构体

 向结构体中添加信息

结构体函数​

嵌套结构

5.Cell

创建 Cell

Matlab如何做到​

Exercise 

读取 Cell 内容

Cell 函数

6.多维数组​

cat()指令

reshape() 指令

7.检查变量和变量状态​

二、文件访问​

save() 和 loda() ​

Excel 文件读取:xlsread()

Excel 文件存储:xlswrite()​​​​​​​

从 Excel 电子表格中获取文本

低级文件输入/输出​

低级文件 I/O 函数​

格式化读写​​​​​​​

读取文件

前言

为在B站跟随台湾大学郭彦甫老师学习matlab的笔记,截图来自郭老师PPT,部分内容参考B站弹幕和评论,仅供学习参考。


一、变量

1.变量(数据)类型转换

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

2.char

字符使用 0 到 255 之间的数字代码以 ASCII 表示

通过将字符或字符串放入一对撇号中创建字符或字符串

>> s1='h'

s1 =

h

>> whos
  Name      Size            Bytes  Class    Attributes

  s1        1x1                 2  char               

>> s1='hex'

s1 =

hex

>> whos
  Name      Size            Bytes  Class    Attributes

  s1        1x3                 6  char

字符以ASCII码储存

>> s1 = 'h'
whos
uint16(s1)

s1 =

h

  Name      Size            Bytes  Class    Attributes

  s1        1x1                 2  char               


ans =

  uint16

   104

>> s2 = 'H'
whos
uint16(s2)

s2 =

H

  Name      Size            Bytes  Class     Attributes

  ans       1x1                 2  uint16              
  s1        1x1                 2  char                
  s2        1x1                 2  char                


ans =

  uint16

   72

3.String

包含字符的数组

 字符串连接

>> s1 = 'Example';
s2 = 'String';
>> s3 = [s1 s2]

s3 =

ExampleString

>> s4 = [s1;s2]
错误使用 vertcat
串联的矩阵的维度不一致。

报错原因:s1 与 s2 长度不一致

逻辑运算和分配

字符串可以索引(indexing)

>> str = 'aardvark';
>> str(3)

ans =

r

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

>> str = 'aardvark';
>> 'a' == str

ans =

  1×8 logical 数组

   1   1   0   0   0   1   0   0

分别比较每个字符,返回数组的对应位置为逻辑变量1或0

 

>> str(str == 'a') = 'Z'

str =

ZZrdvZrk

使用 strcmp() 比较两字符串是否相同

>> s1='matlab';
>> s2='Matlab';
>> strcmp(s1,s2)

ans =

  logical

   0

>> s2='matlab';
>> strcmp(s1,s2)

ans =

  logical

   1

Exercise

编写反转任何给定字符串的脚本

>> s1='I like the letter E';
>> s2=s1(length(s1):-1:1)

s2 =

E rettel eht ekil I

>> s3=reverse(s1)        %%reverse()逆序字符串中的字符

s3 =

E rettel eht ekil I

4.stucture

创建结构体

一种存储异构数据的方法

结构包含称为字段的数组

>> 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: *
     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(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(2).grade(7)

ans =

    90

结构体函数

嵌套结构

使用 struct(a,b,c,d) 声明一个结构体,包含两个 field (暂时不知道中文民)a 和 c ,a 的值是 b ,c 的值是 d。

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

>> A(1).data

ans =

     3     4     7
     8     0     1

5.Cell

存储异构数据的另一种方法

与矩阵类似,但每个条目都包含不同类型的数据

使用大括号声明一个 cell

创建 Cell

两种方式创建cell

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

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

Matlab如何做到

Exercise 

创建如下cell

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

A =

  2×2 cell 数组

    'This is the firse cell.'    [1×2 double]
    [3×3 double]    {1×2 cell  }

读取 Cell 内容

使用小括号读取内容类型

使用大括号读取具体内容

>> A(1,2)

ans =

  cell

    [1×2 double]

>> A{1,2}

ans =

   5.0000 + 6.0000i   4.0000 + 5.0000i

Cell 函数

>> a = magic(3)
b = num2cell(a)
c = mat2cell(a, [1 1 1], 3)

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.多维数组

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() 指令

返回一个重新分配行和列的新数组

>> A = {'James Bond', [1 2;3 4;5 6]; pi, magic(5)};
C = reshape(A,1,4)

C =

  1×4 cell 数组

    'James Bond'    [3.1416]    [3×2 double]    [5×5 double]

>> A=[1:3;4:6];
>> B=reshape(A,3,2)

B =

     1     5
     4     3
     2     6

7.检查变量和变量状态

二、文件访问

save() 和 loda() ​​​​​​​

使用 -ascii 保存的文件可使用记事本查看,但读取时也必须使用 -ascii

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

Excel 文件读取:xlsread()

读取 excel 文件内数据,可指定范围,只能读取数据,不能读取文字

>> Score=xlsread('D:\score.xlsx')

Score =

    10    45    32
    23    45    54
    21    23    12

>> Score=xlsread('D:\score.xlsx','B3:D2')

Score =

    10    45    32
    23    45    54

Excel 文件存储:xlswrite()​​​​​​​

可以写入文字

计算平均值并写入 excle

>> M=mean(Score')';
>> xlswrite('D:\hebut\code\matlab\score.xlsx',M,1,'E2:E4')
>> xlswrite('D:\hebut\code\matlab\score.xlsx',{'mean'},1,'E1')

从 Excel 电子表格中获取文本

文本将被存储在 cell 内

>> [Socre Header]=xlsread('D:\score.xlsx')

Socre =

   10.0000   45.0000   32.0000   29.0000
   23.0000   45.0000   54.0000   40.6667
   21.0000   23.0000   12.0000   18.6667


Header =

  4×5 cell 数组

    'name'    'test1'    'test2'    'test3'    'mean'
    'A'       ''         ''         ''         ''    
    'B'       ''         ''         ''         ''    
    'C'       ''         ''         ''         ''    

低级文件输入/输出

低级文件 I/O 函数

 将正弦函数写入 txt 文件

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

格式化读写​​​​​​​

格式操作类似 C 语言

读取文件

feof(fid) 判断文件是否结束,结束返回1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值