MATLAB绘图基础2:MATLAB数据结构

参考书:《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。



2.MATLAB数据结构
2.1 MATLAB向量
  • 数组 ( A r r a y ) ({\rm Array}) (Array): M A T L A B {\rm MATLAB} MATLAB中数组可以是一维数组、二维数组或多维数组,这些数组可以包含数字、字符串、逻辑值等各种类型的数据;
  • 向量是特殊的一维数组,矩阵是特殊的二维数组,无论是数字、文本还是其他数据类型,在 M A T L A B {\rm MATLAB} MATLAB中以数组的形式存储和处理;
  • 几个向量的概念:
    • 维度:向量的维度表示它所包含的元素数量,一维向量通常用于表示一列或一行数据;
    • 元素:向量中每个单独数据元素称为向量的"分量"或"元素",元素可以是数字、文本、逻辑值等各种数据类型;
    • 索引:向量中每个元素都有一个唯一的索引,用于标识它的位置;
    • 表示:向量可以表示为行向量或列向量;
matlab 复制代码
% ch02_01.m
% 向量相关操作:

%% 1.创建向量
% 1.1 创建行向量时使用中括号[]将元素括起来,在中间用空格或逗号(,)分隔每个元素;
% 1.2 创建列向量时使用中括号[]将元素括起来,在中间使用分号(;)分隔每个元素;
row_vector1 = [10, 20, 30, 40, 50];     % 创建一个行向量,逗号分隔;
row_vector2 = [10 20 30 40 50];         % 创建一个行向量,空格分隔;
column_vector1 = [10;20;30;40;50];      % 创建一个列向量,分号分隔;

row_vector1,row_vector2,column_vector1

%% 2.访问向量的单个元素
% 2.1 MATLAB中向量的单个元素,使用括号()和相应的索引进行访问;
% 2.2 MATLAB中向量的索引从1开始;
row_vector3 = [10, 20, 30, 40, 50];     % 创建一个行向量,逗号分隔;
column_vector2 = [10;20;30;40;50];      % 创建一个列向量,分号分隔;

element1 = row_vector3(1);              % 访问行向量第一个元素10;
element2 = row_vector3(4);              % 访问行向量第四个元素40;

element3 = column_vector2(1);           % 访问列向量第一个元素10;
element4 = column_vector2(3);           % 访问列向量第三个元素30;

element1,element2,element3,element4

%% 3.访问向量的多个元素
% 3.1 MATLAB中访问向量的多个元素,使用括号()和冒号:指定范围或索引;
% 3.2 语法格式:subset = vector(start_index:end_index);
% 3.3 start_index:起始索引;end_index:结束索引;包括起始索引和结束索引;
% 3.4 指定其中步长,默认步长为1;
% 3.5 语法格式:subset = vector(start_index:step:end_index);
row_vector4 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
subset1 = row_vector4(1:5);             % 访问行向量第一到第五的元素,步长1;
subset2 = row_vector4(1:2:9);           % 访问行向量第一到第九的元素,步长2;
subset3 = row_vector4(1:3:9);           % 访问行向量第一到第九的元素,步长3;
subset1,subset2,subset3
matlab 复制代码
% ch02_01.m结果:
row_vector1 =

    10    20    30    40    50


row_vector2 =

    10    20    30    40    50


column_vector1 =

    10
    20
    30
    40
    50


element1 =

    10


element2 =

    40


element3 =

    10


element4 =

    30


subset1 =

     1     2     3     4     5


subset2 =

     1     3     5     7     9


subset3 =

     1     4     7
2.2 MATLAB矩阵
  • 矩阵 ( M a t r i x ) ({\rm Matrix}) (Matrix):矩阵是二维数组的一种特殊形式,用于存储一系列数字数据;
  • 矩阵表示方法:一个 m × n {m\times{n}} m×n的矩阵表示有 m m m行和 n n n列, m 、 n m、n m、n均是正整数;
  • 元素:矩阵的每个位置都包含一个数值,这些数值称为矩阵的元素,矩阵的元素可以是实数、复数、符号、表达式等;
  • 矩阵维度:矩阵的维度由行数和列数决定;
  • 特殊的矩阵:单位矩阵、对角矩阵、对称矩阵等;
matlab 复制代码
% ch02_02.m
% 矩阵相关操作:

%% 1.创建矩阵
% 1.1 MATLAB中,在每行输入元素创建矩阵,元素间用逗号或空格分隔,
%     使用分号进行行分隔;

% 创建一个3x3矩阵
matrix1 = [1, 2, 3;
           4, 5, 6;
           7, 8, 9];
matrix1

%% 2.使用内置函数创建矩阵

matrix2 = zeros(4,4);       % 创建一个4x4全0矩阵;
matrix3 = ones(4, 4);       % 创建一个4x4全1矩阵;
matrix4 = eye(4);           % 创建一个4x4单位矩阵;
matrix2,matrix3,matrix4

%% 3.访问矩阵的单个元素
% 使用括号()和相应的行列索引对矩阵中的单个元素访问
% 创建一个3x3矩阵
matrix5 = [1, 2, 3;
           4, 5, 6;
           7, 8, 9];
 element1 = matrix5(1,1);       % 值1;
 element2 = matrix5(1,2);       % 值2;
 element3 = matrix5(2,2);       % 值5;
 element4 = matrix5(3,3);       % 值9;
 element1,element2,element3,element4
 
 %% 4.访问矩阵的多个元素
 % 使用()和冒号对矩阵中多个元素访问
 % 创建一个3x3矩阵
 matrix6 = [1, 2, 3;
           4, 5, 6;
           7, 8, 9];
 subset1 = matrix6(1, 1:3);     % 第1行,第1至3列的值;
 subset2 = matrix6(1:3, 1);     % 第1列,第1至3行的值;
 subset3 = matrix6(1:2, 1:2);   % 第1至2行,第1至2列的值;
 subset4 = matrix6(:,:);        % 全部元素;
 subset1,subset2,subset3,subset4
matlab 复制代码
% ch02_02.m结果:

% 1.创建矩阵;
matrix1 =

     1     2     3
     4     5     6
     7     8     9

% 2.使用内置函数创建矩阵;
matrix2 =

     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0


matrix3 =

     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1


matrix4 =

     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1

% 3.访问矩阵中单个元素;
element1 =

     1


element2 =

     2


element3 =

     5


element4 =

     9

% 4.访问矩阵中的多个元素;
subset1 =

     1     2     3


subset2 =

     1
     4
     7


subset3 =

     1     2
     4     5


subset4 =

     1     2     3
     4     5     6
     7     8     9
2.3 MATLAB多维数组
  • 多维数组 ( M u l t i d i m e n s i o n a l A r r a y s ) ({\rm Multidimensional\ Arrays}) (Multidimensional Arrays):多维数组是二维矩阵的扩展,可以包含更多的维度;
  • 多维数组有多个维度,三维数组具有行、列和深度三个维度,四维数组具有更高的维度;
matlab 复制代码
% ch02_03.m
% 多维数组相关操作:
clc;
clear;

%% 1.手动创建一个3x3x3(行x列x深度)的三维数组; 
dimensional_array1(:,:,1)=[1, 2, 3;4, 5, 6;7, 8, 9];         
dimensional_array1(:,:,2)=[10, 20, 30;40, 50, 60;70, 80, 90];
dimensional_array1(:,:,3)=[100, 200, 300;400, 500, 600;700, 800, 900];
dimensional_array1

%% 2.使用内置函数创建一个3x3x2的三维数组;
dimensional_array2 = ones(3, 3, 2);
dimensional_array3 = zeros(3, 3, 2);
dimensional_array4 = rand(3, 3, 2);
dimensional_array2,dimensional_array3,dimensional_array4

%% 3.reshape创建一个3x2x2的三维数组,读取一维二维数组一列一列从上往下读取;
array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
array2 = [1, 2, 3, 4, 5, 6; 7, 8, 9, 10, 11, 12];
array1,array2

dimensional_array5 = reshape(array1, [3, 2, 2]);
dimensional_array6 = reshape(array2, [3, 2, 2]);
dimensional_array5,dimensional_array6

%% 4.访问三维数组元素,使用括号()和逗号,访问指定索引的元素;
% 创建一个3x3x3(行x列x深度)的三维数组; 
% 第一页元素;
dimensional_array7(:,:,1)=[1, 2, 3;4, 5, 6;7, 8, 9];

% 第二页元素;
dimensional_array7(:,:,2)=[10, 20, 30;40, 50, 60;70, 80, 90];

% 第三页元素;
dimensional_array7(:,:,3)=[100, 200, 300;400, 500, 600;700, 800, 900];

array_element1 = dimensional_array7(1, 1, 1);  % 第1行第1列第1页元素1;
array_element2 = dimensional_array7(2, 2, 2);  % 第2行第2列第2页元素50;
array_element3 = dimensional_array7(3, 3, 3);  % 第3行第3列第3页元素900;
array_element4 = dimensional_array7(2, 2, 1);  % 第2行第2列第1页元素5;
array_element1,array_element2,array_element3,array_element4
matlab 复制代码
% ch02_03.m结果:
dimensional_array1(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


dimensional_array1(:,:,2) =

    10    20    30
    40    50    60
    70    80    90


dimensional_array1(:,:,3) =

   100   200   300
   400   500   600
   700   800   900


dimensional_array2(:,:,1) =

     1     1     1
     1     1     1
     1     1     1


dimensional_array2(:,:,2) =

     1     1     1
     1     1     1
     1     1     1


dimensional_array3(:,:,1) =

     0     0     0
     0     0     0
     0     0     0


dimensional_array3(:,:,2) =

     0     0     0
     0     0     0
     0     0     0


dimensional_array4(:,:,1) =

    0.4018    0.1233    0.4173
    0.0760    0.1839    0.0497
    0.2399    0.2400    0.9027


dimensional_array4(:,:,2) =

    0.9448    0.3377    0.1112
    0.4909    0.9001    0.7803
    0.4893    0.3692    0.3897


array1 =

     1     2     3     4     5     6     7     8     9    10    11    12


array2 =

     1     2     3     4     5     6
     7     8     9    10    11    12


dimensional_array5(:,:,1) =

     1     4
     2     5
     3     6


dimensional_array5(:,:,2) =

     7    10
     8    11
     9    12


dimensional_array6(:,:,1) =

     1     8
     7     3
     2     9


dimensional_array6(:,:,2) =

     4    11
    10     6
     5    12


array_element1 =

     1


array_element2 =

    50


array_element3 =

   900


array_element4 =

     5
2.4 MATLAB元胞数组
  • 元胞数组 ( C e l l A r r a y s ) ({\rm Cell\ Arrays}) (Cell Arrays)可以容纳不同类型的数据和大小不同的数组;
  • 元胞数组中的元素称为"元胞",每个元胞可以存储不同的数据类型,包括数值、文本、函数句柄等;
  • 元胞数组通常用于处理混合数据或具有不规则结构的数据;
matlab 复制代码
% ch02_04.m
% 元胞数组相关操作:
clc;
clear;

%% 1.创建元胞数组
% 使用大括号{}创建元胞数组,每个元胞可以包含任何类型的数据;
cellArray1 = {1, 3.14, 'Willard', [1, 2, 3, 4]};
cellArray2 = {'Willard', 'Chen', 'Jin', 'FUXI'};
cellArray1,cellArray2

%% 2.访问元胞数组
% 2.1 使用大括号{}或小括号()通过索引访问元胞数组的元素;
% 2.2 ()用于访问元胞元素内部的数组元素;
% 2.3 {}用于访问整个元胞;

% 创建一个2行3列的元胞数组;
cellArray3 = {8, 'Willard', [5, 8, 4;5, 2, 0]; 6, 'Chen', logical([1 0])};

% 使用{}访问整个元胞元素;
cellElement1 = cellArray3{1};           % 访问第1个元胞元素,值8
cellElement2 = cellArray3{2};           % 访问第2个元胞元素,值6
cellElement3 = cellArray3{3};           % 访问第3个元胞元素,字符串'Willard'

cellElement4 = cellArray3{1, 1};        % 访问第1行第1列元胞,值8
cellElement5 = cellArray3{1, 3};        % 访问第1行第3列元胞,二维数组
cellElement6 = cellArray3{2, 2};        % 访问第2行第2列元胞,字符串'Chen'

cellElement1,cellElement2,cellElement3
cellElement4,cellElement5,cellElement6

% 使用()访问元胞元素中的数组元素;
cellElement7 = cellArray3{3};           % 访问第3个元胞元素,字符串'Willard'
cellElement8 = cellArray3{3}(1, 1);     % 访问第3个元胞元素第1行第1列的元素,值'W'
cellElement9 = cellArray3{5}(1, :);     % 访问第5个元胞元素第1行元素,5 8 4
cellElement7,cellElement8,cellElement9
matlab 复制代码
% ch02_04.m结果:
cellArray1 =

  1×4 cell 数组

    {[1]}    {[3.1400]}    {'Willard'}    {1×4 double}


cellArray2 =

  1×4 cell 数组

    {'Willard'}    {'Chen'}    {'Jin'}    {'FUXI'}


cellElement1 =

     8


cellElement2 =

     6


cellElement3 =

    'Willard'


cellElement4 =

     8


cellElement5 =

     5     8     4
     5     2     0


cellElement6 =

    'Chen'


cellElement7 =

    'Willard'


cellElement8 =

    'W'


cellElement9 =

     5     8     4
2.5 MATLAB字符串
matlab 复制代码
% ch02_05.m
clc;
clear;

% 字符串:一种用于存储文本数据的数据类型;
% 字符串相关操作:

%% 1.创建字符串
% MATLAB中,使用双引号""或单引号''创建字符串;
str1 = "Hello.My name is Willard.";         % 双引号创建字符串;
str2 = 'Welcome to FUXI AI Technology.';    % 单引号创建字符串;

str1,str2

%% 2.字符串拼接
% MATLAB中,使用加号+连接两个字符串;
str3 = "Hello";
str4 = "ChenJD.";
str34 = str3 + " " + str4;
str34

%% 3.字符串长度
% MATLAB中,使用strlength函数获取字符串长度;
str5 = "Hello.My name is Willard.";         % 双引号创建字符串;
str6 = 'Welcome to FUXI AI Technology.';    % 单引号创建字符串;
str5_length = strlength(str5);
str6_length = strlength(str6);
str5_length,str6_length

%% 4.字符串分割
% MATLAB中,使用strsplit函数将字符串拆分为字符串数组,使用分隔符指定拆分位置;
str7 = "GuangZhou ShenZhen Zhanjiang";
str8 = 'Math,Chinese,History.';
str7Array = strsplit(str7, ' ');            % 使用空格拆分字符串;
str8Array = strsplit(str8, ',');            % 使用逗号拆分字符串;
str7Array,str8Array

%% 5.字符串查找
% MATLAB中,使用strfind函数查找子字符串在主字符串中的位置;
str9 = "Welcome to FUXI AI Technology.";
subString1 = "Welcome";
subString2 = "FUXI";
sub_str_index1 = strfind(str9, subString1);
sub_str_index2 = strfind(str9, subString2);
sub_str_index1,sub_str_index2

%% 6.字符串替换
% MATLAB中,使用replace函数将字符串中的指定子字符串替换为新的子字符串;
str10 = "My name is Willard.";
replaceStr = replace(str10, 'Willard', 'ChenJD');
replaceStr

%% 7.字符串大小写转换
% MATLAB中,使用lower和upper函数将字符串转换为小写或大写;
str11 = "FUXI";
str12 = "fuxi";
lowerStr = lower(str11);
upperStr = upper(str12);
lowerStr,upperStr

%% 8.字符串格式化
% 语法格式:
% formattedStr = sprintf(format, arg1, arg2, ...);
% format:格式字符串,指定最终输出字符串的格式;
% arg1,arg2,...:要插入格式字符串中的数据或变量;
name = "Willard";
class = "Class Four";
math_score = 100;
Chinese_score = 99;
formattedStr1 = sprintf("Name:%s,class:%s",name,class);
formattedStr2 = sprintf("math_score:%d,Chinese_score:%d",math_score,Chinese_score);
formattedStr1,formattedStr2
matlab 复制代码
% ch02_05.m结果:
str1 = 

    "Hello.My name is Willard."


str2 =

    'Welcome to FUXI AI Technology.'


str34 = 

    "Hello ChenJD."


str5_length =

    25


str6_length =

    30


str7Array = 

  1×3 string 数组

    "GuangZhou"    "ShenZhen"    "Zhanjiang"


str8Array =

  1×3 cell 数组

    {'Math'}    {'Chinese'}    {'History.'}


sub_str_index1 =

     1


sub_str_index2 =

    12


replaceStr = 

    "My name is ChenJD."


lowerStr = 

    "fuxi"


upperStr = 

    "FUXI"


formattedStr1 = 

    "Name:Willard,class:Class Four"


formattedStr2 = 

    "math_score:100,Chinese_score:99"
2.6 MATLAB结构体
  • M A T L A B {\rm MATLAB} MATLAB中,结构体是用于组织和存储不同类型的数据的数据类型;
  • 结构体将相关数据项组合在一起,并为每个数据项分配一个字段名称,便于访问和管理数据;
matlab 复制代码
% ch02_06.m
clc;
clear;

% 结构体的相关操作;
%% 1.创建结构体示例:

% 示例1:学生基本信息
studentInfo.name = "Willard";
studentInfo.age = 18;
studentInfo.class = "Class Four";
studentInfo.gender = "male";
studentInfo

% 示例2:学生各科成绩
studentScore.math = 100;
studentScore.Chinese = 95;
studentScore.physics = 98;
studentScore.chemistry = 99;
studentScore

%% 2.访问结构体字段
% 使用点运算符.对结构体字段进行访问;
stuName = studentInfo.name;
stuAge = studentInfo.age;

stuScore1 = studentScore.math;
stuScore2 = studentScore.Chinese;
stuName,stuAge,stuScore1,stuScore2

%% 3.修改结构体字段值
studentInfo.name = "ChenJD";
studentInfo.gender = "female";
studentInfo

studentScore.Chinese = 100;
studentScore.physics = 99;
studentScore

%% 4.结构体数组
studentInfomation(1).name = "Luo";
studentInfomation(1).age = 20;
studentInfomation(2).name = "Chen";
studentInfomation(2).age = 18;
studentInfomation
matlab 复制代码
% ch02_06.m结果:
studentInfo = 

  包含以下字段的 struct:

      name: "Willard"
       age: 18
     class: "Class Four"
    gender: "male"


studentScore = 

  包含以下字段的 struct:

         math: 100
      Chinese: 95
      physics: 98
    chemistry: 99


stuName = 

    "Willard"


stuAge =

    18


stuScore1 =

   100


stuScore2 =

    95


studentInfo = 

  包含以下字段的 struct:

      name: "ChenJD"
       age: 18
     class: "Class Four"
    gender: "female"


studentScore = 

  包含以下字段的 struct:

         math: 100
      Chinese: 100
      physics: 99
    chemistry: 99


studentInfomation = 

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

    name
    age
2.7 MATLAB表
  • M A T L A B {\rm MATLAB} MATLAB中,表用于组织和存储二维数据的一种数据结构;

  • 表的每一列可以包含不同类型的数据,每一列都有一个名称;

  • 表示例:

    N a m e {\rm Name} Name A g e {\rm Age} Age H e i g h t {\rm Height} Height w e i g h t {\rm weight} weight
    W i l l a r d {\rm Willard} Willard 20 20 20 173 173 173 65 65 65
    C h e n J D {\rm ChenJD} ChenJD 18 18 18 165 165 165 48 48 48
    Z h a n g {\rm Zhang} Zhang 18 18 18 166 166 166 46 46 46
matlab 复制代码
% ch02_07.m
clc;
clear;

% 表的相关操作;
%% 1.创建表
% MATLAB中,使用table函数创建表,创建表格时,指定列的名称及每列的数据;
studentsInfo = table(...
    {'Willard';'ChenJD';'Zhang'},...        
    [20; 18; 18],...
    [173; 165; 166],...
    [65; 48; 46],...
    'VariableNames', {'Name', 'Age', 'Height', 'Weight'});      % 指定表格列名;
studentsInfo

%% 2.访问表数据
% 使用列名称访问表数据
stuNames = studentsInfo.Name;           % 访问学生姓名列;
stuAges = studentsInfo.Age;             % 访问学生年龄列;
stuHeights = studentsInfo.Height;       % 访问学生身高列;
stuWeights = studentsInfo.Weight;       % 访问学生体重列;
stuNames,stuAges,stuHeights,stuWeights

% 使用索引访问表数据
column1 = studentsInfo{:,1};            % 访问所有行的第1列数据;
column2 = studentsInfo{:,2};            % 访问所有行的第2列数据;
column3 = studentsInfo{:,3};            % 访问所有行的第3列数据;
column4 = studentsInfo{:,4};            % 访问所有行的第4列数据;
column1,column2,column3,column4
matlab 复制代码
% ch02_07.m结果:
studentsInfo =

  3×4 table

       Name        Age    Height    Weight
    ___________    ___    ______    ______

    {'Willard'}    20      173        65  
    {'ChenJD' }    18      165        48  
    {'Zhang'  }    18      166        46  


stuNames =

  3×1 cell 数组

    {'Willard'}
    {'ChenJD' }
    {'Zhang'  }


stuAges =

    20
    18
    18


stuHeights =

   173
   165
   166


stuWeights =

    65
    48
    46


column1 =

  3×1 cell 数组

    {'Willard'}
    {'ChenJD' }
    {'Zhang'  }


column2 =

    20
    18
    18


column3 =

   173
   165
   166


column4 =

    65
    48
    46
相关推荐
lw向北.2 分钟前
Qt For Android之环境搭建(Qt 5.12.11 Qt下载SDK的处理方案)
android·开发语言·qt
qystca17 分钟前
洛谷 P11242 碧树 C语言
数据结构·算法
IT女孩儿23 分钟前
JavaScript--WebAPI查缺补漏(二)
开发语言·前端·javascript·html·ecmascript
冠位观测者24 分钟前
【Leetcode 热题 100】124. 二叉树中的最大路径和
数据结构·算法·leetcode
m0_7482389224 分钟前
webgis入门实战案例——智慧校园
开发语言·ios·swift
XWXnb627 分钟前
数据结构:链表
数据结构·链表
悲伤小伞29 分钟前
C++_数据结构_详解二叉搜索树
c语言·数据结构·c++·笔记·算法
Clockwiseee38 分钟前
PHP伪协议总结
android·开发语言·php
小灰灰搞电子39 分钟前
Qt实现Android的图案密码(图形解锁)源码分享
开发语言·qt
吴冰_hogan2 小时前
JVM(Java虚拟机)的组成部分详解
java·开发语言·jvm