• Matlab笔记-第八章


    语句

    • cell array元胞
    cell(3,4) % cell的3行4列矩阵
    
    cell1 = {23,'123','hello'} % {[23]} {['123']} {['hello']} 这就是cell的array
    cellmat = {2,'a';3,'b'}; % cell矩阵
    
    cell1(1) % {23}
    cell1{1} % 23
    cellmat{3}(1) % 'h'
    cellmat{2,2} % 'b'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • cell的删除
    cell1 = {23,'123','hello'}
    cell1(2) = []; % 把第二个格子删除了
    
    cell1(2) = {'12'}; % {23,'12','hello'}把第二个柜子换了
    
    • 1
    • 2
    • 3
    • 4
    • cell的长度
    cell1 = {'A','BB','CCC'};
    length(cell1); % 3
    strlength(cell1); % 1 2 3 
    
    • 1
    • 2
    • 3

    字符的捏合和拆分

    • strjoin和strsplit
    name = {'123','456','789'};
    
    name1 = strjoin(name,'-'); % 123-456-789
    strsplit(name1,'-'); % 123 456 789
    
    iscellstr(name); % 1
    
    namechange = [name 123] % {'123'} {'456'} {'789'} {[123]}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 练习1-随机选取一个cell中的柜子
    function Practice_8dot1(inputCell)
    
        TotalNumOfElement = numel(inputCell); % cell的总数
        randIndex = randi(TotalNumOfElement); % 随机cell的总数中的一个元素
        disp(inputCell{randIndex}); % 随机选取一个cell中的柜子
    
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    字典

    • struct字典
    package = struct('item_no',123,'cost',19.99,'price',39.95,'code','g'); % field:字段 value:值
    
    class(package) % 'struct'
    package.item_no % 123 字典的访问
    package.('item_no') % 123 字典的访问
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • struct字典的输入-字典中的field不允许以字母和特殊符号为开头
    package.item = 123; % item:123
    package.no = 5; % item:123 no:5
    package.o = 'g'; % item:123 no:5 o:'g'
    
    % 字典的修改
    package.o = 'a'; % item:123 no:5 o:'a'
    
    % 字典的删除
    rmfield(package,'item'); % no:5 o:'a'
    
    % 是否是字典
    isstruct(package) % 1 是字典
    isstruct({1 2 3}) % 0 不是字典
    
    % 是否是字典的字段
    isfield(package,'no') % 1 有存在字段为5
    
    % 字典的所有字段
    fieldnames(package) % {no} {o}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 练习1-查找字典中的字段
    %% addressStruct(newstruct,'ab')
    function addressStruct(struct,field)
    
        if isfield(struct,field)
            fprintf('is ''%s''',field);
            disp(struct.(field));
        else
            fprintf('erro');
        end
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 练习2-字典多字段

    在这里插入图片描述

    packs(1) = struct('item',123,'cost',19.99,'price',39.99,'code','a');
    packs(2) = struct('item',456,'cost',19.99,'price',39.99,'code','b');
    packs(3) = struct('item',789,'cost',19.99,'price',39.99,'code','c');
    
    %{
         item
         cost
        price
         code
    }%
    packs
    
    %{
         item: 123
         cost: 19.9900
        price: 39.9900
         code: 'a'
    }%
    packs(1);
    packs(1).name = struct1; % 给第一个字段新增一个struct1
    
    %{
         item: 123
         cost: 19.9900
        price: 39.9900
        code: 'a'
       name: struct1
    }%
    packs(1);
    
    %{
         item: 456
         cost: 19.9900
        price: 39.9900
        code: 'b'
       name: []
    }%
    packs(2); % 给第一个字段新增一个struct1;第二个也会出现一个新字段
    
    %{
         item: 456
         cost: 19.9900
        price: 39.9900
       name: []
    }%
    refield(packs(1),'code'); % 就会删除 packs(1) packs(2) packs(3)的字段
    
    packs.code; % 'a' 'b' 'c' % 逗号分隔符 写法等价packs(1).code,packs(2).code,packs(3).code
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 逗号分隔列表Comma separated list
    [1,2,3,4] % 1 2 3 4
    1,2,3,4 % 1 2 3 4
    
    % cell
    cell = {12,'123','hello'};
    cell{1:3}; % 12 '123' 'hello' 这就是逗号分隔符
    cell{1},cell{2},cell{3}; % 12 '123' 'hello' 这就是逗号分隔符
    
    [a,b,c] = cell{:}; % a=12 b='123' c='hello'  赋值[***] = ***的意思
    
    % 所以上面👆的
    packs.code; % 'a' 'b' 'c' % 逗号分隔符 写法等价packs(1).code,packs(2).code,packs(3).code
    [packs.code]; % ['a' 'b' 'c'] 这是数组
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 练习3-逗号分隔列表Comma separated list
    a1 = 123;
    a2 = '123';
    a3 = 'hello';
    
    % 用两步才可以构成Comma separated list
    c = {a1,a2,a1}
    [b1,b2,b3] = c{:};
    
    % 用一步构成Comma separated list 
    [b1,b2,b3] = deal(a1,a2,a3); % deal就是处理变成Comma separated list的;deal就是分割的意思
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • cell2mat
    cell2mat({1,2,3}) % 1 2 3;cell变成矩阵;变成1行3列的矩阵
    
    • 1
    • 练习4-画布中的Comma separated list 的使用
    X =-pi:pi/10:pi;
    Y1 = sin(X);
    Y2 = cos(X);
    Y3 = sinh(X);
    
    %{
    LineWidth 线宽
    MarkerEdgeColor 点的颜色
    MarkerFaceColor 点中间的颜色
    MarkerSize 点的大小
    %}
    
    Dec = {'o-','LineWidth',3,'MarkerEdgeColor','k','MarkerFaceColor','y','MarkerSize',10};
    figure(1);clf;hold on;
    
    plot(X,Y1,Dec{:});
    plot(X,Y2,Dec{:});
    plot(X,Y3,Dec{:});
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 数字会自动变成char
    [65,'1']; % 'A1'
    [65,"1"]; % "65","1"
    
    • 1
    • 2
    • cell的赋值
    c = cell(1,2); % 新建一个1行2列的空cell
    [c{:}] = size(rand(1,4)); % {[1]} {[4]}
    [c{:}]; % 数组
    c{:}; % 逗号分割
    
    b = cell(1,4);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 练习5
    packs(1) = struct('item',123,'cost',19.99,'price',39.99,'code','a');
    packs(2) = struct('item',456,'cost',19.99,'price',39.99,'code','b');
    packs(3) = struct('item',789,'cost',19.99,'price',39.99,'code','c');
    
    save(packs_saved,packs) % 保存成packs_saved.mat的文件
    load('packs_saved.mat') % 加载
    
    function printpackages(packstruct)
        fprintf('\nItem # Cost Price Code \n\n');
        for i = 1:numel(packstruct)
            fprintf('6d %6.2f %7.2f %5c\n',...
            packstruct(i).item,...
            packstruct(i).cost,...
            packstruct(i).price,...
            packstruct(i).code);
        end
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 练习6

    在这里插入图片描述

    最后的得到的
    在这里插入图片描述

    student(1) = struct('name','C,Joe','id_no',999,'quiz',[10.0,9.5,0.0,10.0]);
    student(2) = struct('name','Hernandez,Pete','id_no',784,'quiz',[10.0,10.0,9.0,10.0]);
    student(3) = struct('name','Brownnose,Violet','id_no',332,'quiz',[7.5,6.0,8.5,7.5]);
    
    threeNote1(student);
    
    function threeNote1(student)
        fprintf('Name         Average\n');
        for i = 1:numel(student)
            fprintf('%-20s %.1f\n',student(i).name,mean(student(i).quiz));
        end
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 练习6-结构体嵌套结构体1

    在这里插入图片描述

    lineseg = struct('endpoint1',struct('x',2,'y',4),'endpoint2',struct('x',1,'y',6));
    
    • 1
    • 练习7-结构体嵌套结构体2

    在这里插入图片描述

    cyls(3)=struct('code','c','dimensions',struct('rad',3,'height',6),'weight',9)
    cyls(2)=struct('code','b','dimensions',struct('rad',4,'height',2),'weight',5)
    cyls(1)=struct('code','a','dimensions',struct('rad',3,'height',6),'weight',7)
    
    cyls(1).dimensions.rad; % 3
    
    • 1
    • 2
    • 3
    • 4
    • 5

    categorical类型

    cell = {'ab','abc','abcde'};
    mat = categorical(cell); % ab abc abcde将cell转化为categorical类型
    
    • 1
    • 2
    • 练习8-categorical的使用
    A =[    ...
        3,2;...
        3,3;...
        3,2;...
        2,1;...
        3,2 ...
        ];
    valueset = [1:3]; % 对应cell的index
    catnames = {'child','adult','senior'}; % cell
    
    % 'Ordinal',true开启排序 如可以使用 B(4,2) < B(1,1) 为 1;就是child < senior
    B = categorical(A,valueset,catnames,'Ordinal',true);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    table类型

    • 练习1-table类型创建身高体重
    names = {'Harry','Sally','Jose'}; % 一般插入都用cell
    weights = [185;133;210];
    heights = [74;65.4;72.2];
    
    patients = table(weights,heights,'RowNames',names); % 3行2列的table
    
    % 其实还是对应 左行右列的原则
    patients(1:2,1); % 1到2行,第1列的更小的table
    patients('Harry',:); % Harry的这一行的所有信息
    patients(:,'heights'); %  所有人的heights的信息
    patients({'Harry','Sally'},:); % Harry和Sally的这一行的所有信息
    
    summary(patients); % 查看一些信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    排序

    • sort
    vec = [8 9 7 5 4 2];
    sort(vec); % 也可以
    sort(vec,'descend'); % 降序排序
    sort(vec,'ascend'); % 升序排序
    
    %% i_sorted返回排序前的index
    vec1 = [7 5 9];
    [w_sorted,i_sorted] = sort(vec1); % w_sorted 5 7 9;i_sorted 2 1 3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 练习2-struct按某个元素重新排序
    cyls(3)=struct('code','c','dimensions',struct('rad',3,'height',6),'weight',9)
    cyls(2)=struct('code','b','dimensions',struct('rad',4,'height',2),'weight',5)
    cyls(1)=struct('code','a','dimensions',struct('rad',3,'height',6),'weight',7)
    
    volume1 = [7 9 5];
    
    for i = 1:numel(cyls)
        vol = volume1(i); % computeCylVol就是计算体积的自己写的
        cyls(i).volume = vol;
    end
    
    % ~忽略前值,取到升序排序后的值
    [~ ,i_order] = sort([cyls.volume],'ascend');
    
    % 赋值成升序排序后的值
    cyls = cyls(i_order);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 练习3-table按某个元素重新排序
    names = {'Harry','Sally','Jose'}; % 一般插入都用cell
    weights = [185;133;210];
    heights = [74;65.4;72.2];
    patients = table(weights,heights,'RowNames',names); % 3行2列的table
    
    [~ ,i_order] = sort(patients{:,'weights'}); % 将weights排序
    patients(i_order,:); % 用i_order进行排序
    
    %% 用行进行排序
    sortrows(patients,'heights'); % 通过heights进行排序
    issortedrows(patients,'heights'); % 判断是否已经排序
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    医疗行业:容灾备份平台建设及运维难点
    外汇天眼:MT4和MT5下架,各个行业大佬是怎么看的?
    Vivado详细使用教程 | LED闪烁示例
    树莓派4B部署及测试llamafile
    [附源码]java毕业设计医院疫情疾控管理系统
    分布式理论须知
    微信小程序clearInterval无法关闭时间间隔器问题解决
    Java可重入锁(GPT编写)
    【Aseprite】2D像素山脉背景的制作
    创造财富的9种模式
  • 原文地址:https://blog.csdn.net/weixin_41732253/article/details/127400362