B站台湾大学郭彦甫|MATLAB 学习笔记|04 变量与档案存取

原文链接: https://www.cnblogs.com/find-sth-interesting/articles/16145307.html

发布时间: 2022-04-14 16:30


1. string字符串

string连接的两种方式:

复制代码
s1 = 'Example';
s2 = 'String';

s3=[s1 s2];     %此形式得到s1和s2串联
s4=[s1; s2]; %此形式本应得到s1和s2分列两行,但是需要s1和s2的长度一致,此处长度不一致故报错

>> Class_4
Error using vertcat
Dimensions of arrays being concatenated are not consistent.

Error in Class_4 (line 5)
s4=[s1; s2];

>> s3

s3 =

    'ExampleString'

2. 逻辑运算符和赋值

复制代码
str = 'aardvark'; %将字符串赋值给str
'a' == str;  %此为逻辑运算符,判断str中的每个字符是否等于a,若等于a则为1,不等于a则为0

b= str == 'a';  %str == 'a'将会得到一条关于1和0的字符串
str(str == 'a') = 'Z'  %str()='Z'表示依据()中得到的关于1和0的字符串,将str字符串中等于a的字符赋值为Z

>> Class_4

str =

    'ZZrdvZrk'
>> b

b =

  1×8 logical array

   1   1   0   0   0   1   0   0

P8 exercise

问题:What if we want to compare the entire string with another?

tf= strcmp(s1,s2) %如果s1==s2,则返回 tf 为1,否则为 0。

复制代码
s1='abcde';
s2='dcbae';
TF1= strcmp(s1,s2); %得到的结果为1/0

s3='ccc';
s4='ccc';
TF2=strcmp(s3,s4);

disp(TF1);
disp(TF2);

>> Class_4
   0

   1

P9 exercise

问题:Write a script that inverts any given string

复制代码
s1='I like the letter E';
s2='E rettel eht ekil I';  %如何将s1转变为s2

观察得到s1和s2字符串中的字符顺序颠倒,可以对字符串进行数组操作。

复制代码
s1='I like the letter E';
i=length(s1); %得到s1的长度
s2= s1([i:-1:1]); %把字符串当成数组
disp(s2);

>> Class_4
E rettel eht ekil I

3. 结构体 (Structure)

Struture结构可以存储异构数据,其中包含的阵列叫做 fields

P11 exercise

题目:Retrieve the 3rd grade for Ann Lane(第三个成绩是95 100 90中的90)

复制代码
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(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];

x= student(2).grade(7);  %在矩阵中row1,colunm3的元素为Ann Lane的第三个成绩(90)
disp(x);

>> Class_4

student = 

  struct with fields:

      name: 'John Doe'
        id: 'jdo2@sfu.ca'
    number: 301073268
     grade: [3×3 double]

    90
  • Structure Functions 一些与结构体有关的函数
函数名 作用
cell2struct 将元胞数组转换为结构体数组
fieldnames 返回元胞数组中的字段名称
getfield 返回结构体数组字段的值
isfield Determine whether input is structure array field
isstruct Determinewhether input is structure array
orderfields Order fields of structure array
rmfield Remove fields from structure
setfield Assign values to structure array field
struct Create structure array
struct2cell Convert structure to cell array
structfun Apply function to each field of scalar structure
  • struct的嵌套结构

    A = struct('data', [3 4 7; 8 0 1], 'nest', ...
    struct('testnum', 'Test 1', ...
    'xdata', [4 2 8],'ydata', [7 1 6])); %struct的语法为:s = struct(field,value)

    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 %A(1).nest得到的是第2行的结构体, A(2).nest得到的是第6-8行的结构体

    Class_4

    ans =

    复制代码
    struct with fields:
    
      testnum: 'Test 1'
        xdata: [4 2 8]
        ydata: [7 1 6]

    ans =

    复制代码
    struct with fields:
    
      testnum: 'Test 2'
        xdata: [3 4 2]
        ydata: [5 0 9]

4. 原胞数组 (Cell Array)

与Struct一样,可以存储异构数据,且结构与数组相似,每个元素包含不同的类型。

如要表示以下数组:

复制代码
%%%方法一,{}放在=之后
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{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

%%

>> Class_4

A =

  2×2 cell array

    {3×3 double        }    {'Anne Smith'      }
    {[3.0000 + 7.0000i]}    {[-3.1416 0 3.1416]}

A =

  2×2 cell array

    {3×3 double        }    {'Anne Smith'      }
    {[3.0000 + 7.0000i]}    {[-3.1416 0 3.1416]}

P16 exercise

题目:Create a cell array B that has the following structure

直接使用原胞数组

复制代码
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

>> Class_4

A =

  2×2 cell array

    {'This is the first cell'}    {[5.0000 + 6.0000i ... ]}
    {3×3 double              }    {["Tim"    "Chris"   ]}
  • 获得原胞数组的内容

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

    C=A{2,1}; %输出为内容
    D=A(2,1); %输出为指针
    E=A{2,1}(2,1); %输出为row2 colunm1的cell中的row2 column1的一个数4
    disp(C);
    disp(D);
    disp(E);

    Class_4
    1 2 3
    4 5 6
    7 8 9

    复制代码
      {3×3 double}
    
       4
  • num2cell() 和 mat2cell() 的应用

函数名 内容
mat2cell Convert array to cell array with different sized cells
num2cell Convert array to cell array with consistently sized cells
复制代码
a= magic(3);
b= num2cell(a);  %将a中的每个数转换成单独的cell,此处得到3*3的cell矩阵
c= mat2cell(a,[1 1 1],3);  %[1 1 1]是指将3行分成三部分,3表示3列为一个部分,得到的是1*3的cell矩阵
a
b
c

>> Class_4

a =

     8     1     6
     3     5     7
     4     9     2

b =

  3×3 cell array

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

c =

  3×1 cell array

    {[8 1 6]}
    {[3 5 7]}
    {[4 9 2]}
  • 矩阵的串接((cat() ))

    A=[1 2;3 4]; B=[5 6;7 8];
    C=cat(1,A,B); %将矩阵按列 (row) 排序
    D=cat(2,A,B); %将矩阵按行 (column) 排序
    E=cat(3,A,B); %将矩阵按层 (layer) 排序(可以理解为正方体的正面和背面)

    C
    D
    E

    Class_4

    C =

    复制代码
       1     2
       3     4
       5     6
       7     8

    D =

    复制代码
       1     2     5     6
       3     4     7     8

    E(:,:,1) =

    复制代码
       1     2
       3     4

    E(:,:,2) =

    复制代码
       5     6
       7     8
  • reshape() 函数

    A = {'James Bond', [1 2;3 4;5 6]; pi, magic(5)} ;
    A
    C = reshape(A,1,4) %将cell矩阵A重新排序,从22变为14,注意排序规则为按照矩阵元素顺序排序

    Class_4

    A =

    复制代码
    2×2 cell array
    
      {'James Bond'}    {3×2 double}
      {[    3.1416]}    {5×5 double}

    C =

    复制代码
    1×4 cell array
    
      {'James Bond'}    {[3.1416]}    {3×2 double}    {5×5 double}

P23 exercise

题目:Create a matrix B from the matrix A below using reshape:

A=\\left\[ \\begin{matrix} 1\& 2\& 3\\ 4\& 5\& 6\\ \\end{matrix} \\right\] \\,\\, \\Longrightarrow \\,\\, B=\\left\[ \\begin{matrix} 1\& 5\\ 4\& 4\\ 2\& 6\\ \\end{matrix} \\right\]

复制代码
A = [1:3; 4:6];
A
B=reshape(A,3,2);
B

>> Class_4

A =

     1     2     3
     4     5     6

B =

     1     5
     4     3
     2     6

5. File Access

  • save和load

    save mydata1.mat %按此形式存储,如果用记事本打开,为乱码内容
    save mydata2.mat -ascii %记事本打开可以看到数值内容

    load('mydata1.mat') %加载出来得到完整的文件
    load('mydata2.mat','-ascii') %加载出来变量名不见,相比mydata1.mat,实际得到的内容较少

  • wtite

    M = mean(Score')'; % '号表示将Score转置(从列变成行)求平均再转置为列
    xlswrite('04Score.xlsx', M, 1, 'E2:E4'); %M表示variable,1表示sheet,E2:E4表示位置
    xlswrite('04Score.xlsx', {'Mean'}, 1, 'E1'); %写标头

  • 文件输入输出函数(相对重要的)

函数名 内容
fopen Open file, or obtain information about open files
fprintf Write data to text file
相关推荐
j7~2 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
not coder5 小时前
一文讲通--从树到红黑树
数据结构·算法
爱吃香菜的初学者5 小时前
八.数据结构——哈希表(1)
数据结构·散列表
二十七日秋7 小时前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
小白起 v9 小时前
02-数组与链表
数据结构·链表
路灯上の马陈20 小时前
二叉树的定义与性质
数据结构·二叉树·树结构·1024程序员节
Bshaya_1 天前
红黑树详解:概念、规则与插入实现
数据结构·红黑树·二叉搜索树·平衡树·插入逻辑
WBluuue1 天前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
路灯上の马陈1 天前
数据结构-树
数据结构·1024程序员节