7777777777777

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,贝叶斯滤波与Kalman估计、多传感器信息融合,机器学习,人工智能,控制理论等相关领域的知识和技术。关注公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源!


博主介绍:
CSDN优质创作者,CSDN实力新星,CSDN内容合伙人;
阿里云社区专家博主;
华为云社区云享专家;
51CTO社区入驻博主,掘金社区入驻博主,支付宝社区入驻博主,博客园博主。


《通过案例讲解MATLAB中的数据类型》

      • 0. array(数组)
      • **1. double(双精度浮点数):**
      • 2. **single(单精度浮点数):**
      • **3. int8, int16, int32, int64(有符号整数):**
      • **4. uint8, uint16, uint32, uint64(无符号整数):**
      • **5. char(字符)和string(字符串):**
      • **6. logical(逻辑值):**
      • **7. cell(单元数组):**
      • **8. struct(结构体):**
      • **9. table(表格):**
      • **10. datetime(日期和时间):**
      • **11. duration(持续时间):**
      • **12. function_handle(函数句柄):**
      • **13. cellstr(单元数组字符串):**
      • **14. categorical(分类数据):**
      • **15. containers.Map(映射):**


专栏:《智能优化算法》


在这里插入图片描述

0. array(数组)

在matlab中,数据的基本单位是数组(array),数组就是组织成行和列的数据值的组合,单个的数据值是通过数组名和圆括号中的下标来进行访问的,下标用来确定某个值的行和列。在matlab中,标量也被看成数组来处理,即一行一列的数组。其中数组又可以分为向量(vector)和矩阵(matrix),向量是指只有一维的数组,矩阵是指二维及二维以上的数组。

在这里插入图片描述

在MATLAB中,数组是一种基本的数据结构,用于存储和处理数据。数组可以是多维的,可以包含数字、文本、逻辑值等不同类型的元素。下面是关于MATLAB中数组的一些重要概念和特点:

创建数组

  • 一维数组
% 行向量
rowVector = [1, 2, 3, 4, 5];

% 列向量
columnVector = [1; 2; 3; 4; 5];
  • 多维数组
% 二维数组
matrix = [1, 2, 3; 4, 5, 6; 7, 8, 9];

% 三维数组
threeDArray = cat(3, [1, 2; 3, 4], [5, 6; 7, 8]);
>> threeDArray = cat(3, [1, 2; 3, 4], [5, 6; 7, 8])

threeDArray(:,:,1) =

     1     2
     3     4


threeDArray(:,:,2) =

     5     6
     7     8

>> help cat
 cat - 串联数组。
    此 MATLAB 函数 沿维度 dim 将 B 串联到 A 的末尾。

    C = cat(dim,A,B)
    C = cat(dim,A1,A2,...,An)

    输入参数
        dim - 沿其运算的维度
            正整数标量
        A - 第一个输入
            标量 | 向量 | 矩阵 | 多维数组 || 时间表
        B - 第二个输入
            标量 | 向量 | 矩阵 | 多维数组 || 时间表
        A1,A2,...,An - 输入列表
            逗号分隔的列表
  • 常用操作
A = []; % 创建一个空数组
B = ones(1, 5); % 创建一个1行5列的一维全1数组
C = zeros(2, 3); % 创建一个2行3列的全0数组
R = rand(3, 4); % 用随机分布函数产生一个3行4列的数组

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 冒号 start:interval:end 表示从start开始,每次增加interval,直到end(或小于end的最大整数),interval是步长
>> D = [1:2:10]

D =

     1     3     5     7     9

>> D = [1:10]

D =

     1     2     3     4     5     6     7     8     9    10
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% linspace(start,end,n)表示创建一个从start开始,到end结束的等差数列,公差为(end-start)/(n-1)
>> E = [linspace(4,6,3)]

E =

     4     5     6

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>> F = zeros(3,3,3); % 创建一个三维数组
F(:,:,1) = [1,2,3; 4,5,6; 7,8,9];
F(:,:,2) = [1,2,3; 4,5,6; 7,8,9];
F(:,:,3) = [1,2,3; 4,5,6; 7,8,9];
>> F

F(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


F(:,:,2) =

     1     2     3
     4     5     6
     7     8     9


F(:,:,3) =

     1     2     3
     4     5     6
     7     8     9

>> 

数组索引和切片

% 获取数组元素
element = matrix(2, 3);

% 获取数组的一部分
subset = matrix(1:2, 2:3);
>> matrix = [1, 2, 3; 4, 5, 6; 7, 8, 9]

matrix =

     1     2     3
     4     5     6
     7     8     9

>> subset = matrix(1:2, 2:3)

subset =

     2     3
     5     6

特殊类型的数组

  • 逻辑数组
% 创建逻辑数组
logicalArray = [true, false, true; false, true, false];
  • 字符数组
% 创建字符数组
charArray = ['Hello'; 'World'];

常见操作

  • 运算
% 数组加法
result = matrix + 2;

% 数组乘法
result = matrix * 3;

% 数组排序
sort(matrix);

% 数组的转置
result = matrix';

% 数组的扩展
result = [matrix1 matrix2]; % 将数组matrix2添加到数组matrix1的后面

% 数组的除法与求逆
A/B % 右除等价于A*inv(B)
% 右除也可用于解方程组
>> A = [2 1; 1 3];
b = [4; 7];
x = A \ b % 解线性方程组 Ax = b

x =

     1
     2

>> 
  • 函数
% 求和
sumResult = sum(matrix);

% 平均值
meanResult = mean(matrix);

数组的大小和维度

% 获取数组的大小
sizeOfMatrix = size(matrix); % size得到的是数组的行和列
lengthOfMatrix = length(matrix); % length得到的是行和列的较大值

% 获取数组的维度
numberOfDimensions = ndims(matrix);

处理缺失值

MATLAB 中可以使用 NaN(Not a Number)表示缺失值。

% 创建包含缺失值的数组
arrayWithNaN = [1, NaN, 3; 4, 5, 6; 7, 8, 9];

1. double(双精度浮点数):

在MATLAB中,double 是一种数值数据类型,用于存储双精度浮点数(64位浮点数),占用8字节。double是matlab中默认的数据类型。

>> x = 3.14; % 双精度浮点数
>> whos x
  Name      Size            Bytes  Class     Attributes

  x         1x1                 8  double              

>> a;
>> class(a) % 查看数据类型

ans =

    'double'

创建 double 数组

% 创建一个双精度浮点数数组
A = [1.0, 2.5, 3.7; 4.2, 5.9, 6.1];

特点和精度

  • double 类型在MATLAB中是默认的浮点数类型。
  • 它占用64位内存,提供15-16位有效数字的精度。
  • 能够表示很大范围的实数,包括整数和小数。

常用操作

% 加法
result = A + 2.0;

% 乘法
result = A * 3.0;

% 元素-wise 幂运算
result = A.^2;

% 转置
transposedA = A';

% 矩阵乘法
matrixProduct = A * B;

% 求逆
inverseA = inv(A);

特殊值

double 类型可以表示特殊的值,例如:

  • Inf(正无穷)和 -Inf(负无穷)。
  • NaN(非数字)用于表示未定义或不可表达的结果。
% 创建一个包含特殊值的数组
specialArray = [1.0, Inf, -Inf, NaN];

类型转换

MATLAB允许将其他类型转换为double 类型。例如,将整数数组转换为双精度浮点数数组:

% 将整数数组转换为 double 类型
integerArray = [1, 2, 3];
doubleArray = double(integerArray);

数组的大小和内存占用

double 数组的大小取决于元素的数量和维度。在MATLAB中,可以使用 whos 命令查看变量的详细信息,包括其类型、大小和内存占用。

% 查看变量信息
whos A;

2. single(单精度浮点数):

存储单精度浮点数,占用4字节。

>> y = single(3.14); % 单精度浮点数
>> whos y
  Name      Size            Bytes  Class     Attributes

  y         1x1                 4  single              

3. int8, int16, int32, int64(有符号整数):

存储不同范围的有符号整数。

>> a = int8(10); % 8位有符号整数
b = int16(-32768); % 16位有符号整数
c = int32(2147483647); % 32位有符号整数
d = int64(-9223372036854775808); % 64位有符号整数
>> whos a b c d
  Name      Size            Bytes  Class    Attributes

  a         1x1                 1  int8               
  b         1x1                 2  int16              
  c         1x1                 4  int32              
  d         1x1                 8  int64              

4. uint8, uint16, uint32, uint64(无符号整数):

存储不同范围的无符号整数。

>> e = uint8(255); % 8位无符号整数
f = uint16(65535); % 16位无符号整数
g = uint32(4294967295); % 32位无符号整数
h = uint64(18446744073709551615); % 64位无符号整数
>> whos e f g h
  Name      Size            Bytes  Class     Attributes

  e         1x1                 1  uint8               
  f         1x1                 2  uint16              
  g         1x1                 4  uint32              
  h         1x1                 8  uint64              

5. char(字符)和string(字符串):

存储单个字符或字符串。

>> charVar = 'A'; % 单个字符
strVar = 'Hello, MATLAB!'; % 字符串
>> whos charVar strVar
  Name         Size            Bytes  Class    Attributes

  charVar      1x1                 2  char               
  strVar       1x14               28  char               

在MATLAB中,字符串(string)是用于存储字符序列的数据类型。字符串可以使用单引号或双引号括起来表示。以下是使用字符串的一些示例:

创建字符串变量:

str = 'Hello, World!';

创建字符串数组:

>> str = ["hello", "matlab","!!!"]

str = 

  1×3 string 数组

    "hello"    "matlab"    "!!!"

连接字符串:

>> str1 = 'Hello';  
str2 = 'World';  
% 对比下面几种形式的输出结果
str3 = [str1 + " " + str2] 
str4 = [str1 + ' ' + str2] 
str5 = str1 + ' ' + str2
str6 = str1 + " " + str2
str7 = strcat(str1, " ", str2)

str3 = 

    "Hello World"


str4 =

   191   244   254   248   243


str5 =

   191   244   254   248   243


str6 = 

    "Hello World"


str7 = 

    "Hello World"

字符串中的字符访问:

>> str = 'abcdef';  
first_char = str(1) % 输出:'a'  
last_char = str(end) % 输出:'f'

first_char =

    'a'


last_char =

    'f'

字符串比较:

>> str1 = 'abc';  
str2 = 'def';  
is_equal = isequal(str1, str2) % 输出:0 (false)

is_equal =

  logical

   0

>> whos is_equal
  Name          Size            Bytes  Class      Attributes

  is_equal      1x1                 1  logical              

字符串的子串提取:

>> str = 'Hello, World!';  
sub_str = str(2:4) % 输出下标为2-4的字符

sub_str =

    'ell'

字符串的替换操作:

>> str = 'Hello, World!';  
new_str = strrep(str, 'World', 'MATLAB') % 输出:'Hello, MATLAB!'

new_str =

    'Hello, MATLAB!'

单引号(')和双引号(")的区别

在MATLAB中,单引号(')和双引号(")用于创建字符数组或字符串。它们在使用方式和功能上有一些区别。

  • 单引号(')

单引号用于创建字符数组。创建的数组是一个大小为1×n或n×1的矩阵,其中n是字符串的长度。例如:

str1 = 'Hello';  % 创建字符数组

单引号创建的是字符数组,而不是字符串。在MATLAB中,字符数组的元素可以是字符,也可以是数值。例如:

charArray = ['H', 'e', 'l', 'l', 'o'];  % 创建字符数组

  • 双引号(")

双引号用于创建字符串。从MATLAB R2016b版本开始,引入了字符串数据类型。字符串是一种更灵活、更易于处理的数据类型,因为它可以包含文本、数字和特殊字符。

str2 = "Hello";  % 创建字符串

双引号创建的是字符串,其中的元素可以是字符、数字等。双引号字符串支持更多的操作,例如拼接、查找、替换等。

  • 区别总结
    • 单引号创建字符数组,元素可以是字符或数值。
    • 双引号创建字符串,元素可以是字符、数值等。
    • 从MATLAB R2016b版本开始,建议使用双引号创建字符串,因为字符串数据类型更为灵活和功能丰富。
    • 在一些特殊情况下,比如需要明确字符数组的维度时,可以使用单引号创建字符数组。

6. logical(逻辑值):

存储逻辑值 truefalse

isTrue = true;
isFalse = false;

7. cell(单元数组):

存储不同类型和大小的数据。 单元数组(Cell Array)将类型不同的相关数据集成到一个单一的变量中,使得大量相关数据的引用和处理变得简单方便;需要注意的是,单元数组仅仅是承载其他数据类型的容器,大部分的数学运算只是针对其中的具体数据进行的,而非针对单元数组本身进行。单元数组中的每一个元素称为单元(cell),单元可以包含任何类型的数据,如数值数组、字符、符号对象,甚至于其他的单元数组。单元数组可以使不同类型和不同维数的数组可以共存,细胞型数组实际上可以认为是一种以任意形式的数组为分量的多维数组。

cellVar = {1, 'text', [2 3; 4 5]}; % 不同类型的数据

在MATLAB中,cell 是一种特殊的数据类型,它可以用来存储不同数据类型的元素,包括数字、文本、数组、结构等。cell 数组是一种容器,可以容纳不同大小和类型的数据。

创建 cell 数组

在 MATLAB 中,可以使用花括号 {} 来创建 cell 数组。

% 创建一个空的 cell 数组
emptyCell = cell(1, 0);

% 创建一个包含数字、文本和数组的 cell 数组
mixedCell = {1, 'Hello', [2, 4, 6]};

% 创建一个包含不同大小的数组的 cell 数组
sizeCell = {rand(2, 3), magic(4), 'MATLAB'};

访问和修改 cell 数组中的元素

使用花括号 {} 来访问和修改 cell 数组中的元素。例如:

% 访问 cell 数组中的元素
value1 = mixedCell{1};  % 获取第一个元素
value2 = mixedCell{2};  % 获取第二个元素

% 修改 cell 数组中的元素
mixedCell{3} = 'World';  % 将第三个元素修改为 'World'

cell 数组的索引

与常规数组不同,cell 数组的索引是以花括号 {} 形式进行的。例如:

% 创建一个包含多个元素的 cell 数组
myCell = {'apple', 42, [1, 2, 3], magic(3)};

% 访问第三个元素的第二个值
value = myCell{3}(2);  % 获取 [1, 2, 3] 数组的第二个元素

处理 cell 数组的函数

MATLAB 提供了一些专门用于处理 cell 数组的函数,例如:

  • cellfun: 对 cell 数组中的每个元素应用函数。
  • cell2mat: 将 cell 数组转换为常规数组。
  • mat2cell: 将常规数组分割成 cell 数组。

8. struct(结构体):

结构体用来存储不同字段的数据。结构是包含一组记录的数据类型,而数据则是存储在相应的字段中。结构的字段可以是任意一种MATLAB数据类型的变量或者对象。结构类型的变量可以是一维的、二维的或多维的数组。结构体也叫结构数组,架构数组。不过,在访问结构体类型的元素时,需要使用下标配合字段的形式。

可以在一个结构体中放置各类的数据,并且一个结构体还能是另一个结构体的一部分,即结构体的嵌套使用。相比较而言,结构体比元胞数组更为强大,也更加富于变化。

创建struct

可以使用以下两种方式之一来创建结构体:

  • 使用struct函数,该函数可以产生或者把其他形式的数据转换为struct结构。
>> % 使用struct函数创建结构体
person = struct('name', 'John', 'age', 25, 'city', 'New York')

person = 

  包含以下字段的 struct:

    name: 'John'
     age: 25
    city: 'New York'

>> 

  • 使用点运算符,与建立普通数组一样,建立struct对象不需要事先声明,可以直接引用并动态扩充。
>> % 使用点运算符创建结构体
person.name = 'John';
person.age = 25;
person.city = 'New York';
>> person

person = 

  包含以下字段的 struct:

    name: 'John'
     age: 25
    city: 'New York'

>> person.gender = 'girl';
>> person

person = 

  包含以下字段的 struct:

      name: 'John'
       age: 25
      city: 'New York'
    gender: 'girl'

访问和修改结构体中的字段

可以使用点运算符来访问和修改结构体中的字段:

% 访问结构体中的字段
nameValue = person.name;  % 获取'name'字段的值

% 修改结构体中的字段
person.age = 26;  % 将'age'字段的值修改为26

结构体的字段类型

结构体的字段可以包含各种MATLAB支持的数据类型,包括数字、文本、数组、甚至其他结构体。这使得结构体成为组织和表示复杂数据的理想选择。

% 结构体中包含不同类型的字段
student = struct('name', 'Alice', 'grades', [85, 90, 92], 'contact', struct('email', 'alice@example.com', 'phone', '555-1234'));

嵌套结构体

结构体中的字段可以是其他结构体,形成嵌套结构:

% 嵌套结构体
building.floor1.room1 = struct('occupant', 'Bob', 'status', 'occupied');
building.floor1.room2 = struct('occupant', 'Alice', 'status', 'vacant');

结构体操作函数

MATLAB中专门用于对结构体操作的函数并不多,如下所示。

  • struct:创建结构或将其他数据类型转变成结构;
  • fieldnames:获取结构的字段名称;
  • getfield:获取结构的字段数据;
  • setfield:设置结构的字段数据;
  • rmfield:删除结构的指定字段;
  • isfield:判断给定的 字符串 是否为结构的字段名称,是,返回真,否,返回假;
  • isstruct:判断给定的数据对象是否为结构类型,是,返回真,否,返回假;
  • orderfields:将结构字段排序,按ASCII码排序。

9. table(表格):

在MATLAB中,table 是一种用于组织和存储二维表格数据的数据类型。table 是一种表格型数据结构,类似于电子表格软件中的数据表,可以存储不同类型的数据,具有列名和行标签。

创建表格

可以使用以下方式之一来创建表格:

  • 直接创建
>> % 创建一个包含3行4列的表格
data = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12];
% 指定列名和行名
colNames = {'Column1', 'Column2', 'Column3', 'Column4'};
rowNames = {'Row1', 'Row2', 'Row3'};
% 创建表格,为每一列指定列名
% T = array2table(data, 'VariableNames', colNames, 'RowNames', rowNames)
T = table(data(:, 1), data(:, 2), data(:, 3), data(:, 4), 'VariableNames', colNames, 'RowNames', rowNames)

T =

  3×4 table

            Column1    Column2    Column3    Column4
            _______    _______    _______    _______

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


  • 从其他数据结构转换
>> % 从数组转换为表格
data = [1, 2, 3; 4, 5, 6; 7, 8, 9];
colNames = {'Column1', 'Column2', 'Column3'};
rowNames = {'Row1', 'Row2', 'Row3'};
myTable = array2table(data, 'VariableNames', colNames, 'RowNames', rowNames)

myTable =

  3×3 table

            Column1    Column2    Column3
            _______    _______    _______

    Row1       1          2          3   
    Row2       4          5          6   
    Row3       7          8          9   

>> 

访问和修改表格中的数据

  • 访问数据
% 访问表格中的数据
value = myTable{'Row2', 'Column3'};  % 获取特定行和列的值
columnData = myTable.Column2;  % 获取整列的值

  • 修改数据
% 修改表格中的数据
myTable{'Row2', 'Column3'} = 10;  % 修改特定行和列的值
myTable.Column1 = myTable.Column1 * 2;  % 修改整列的值

处理表格的函数

MATLAB 提供了一些专门用于处理表格的函数,例如:

  • sortrows: 对表格按行进行排序。
  • innerjoin, outerjoin, join: 表格之间的连接操作。
  • groupsummary: 对表格进行分组汇总。
% 使用sortrows对表格按行进行排序
sortedTable = sortrows(myTable, 'Column1', 'descend');

表格的特性

  • 列的数据类型

表格中的每列可以有不同的数据类型,允许存储混合类型的数据。

% 创建包含不同类型数据的表格
mixedTable = table({'apple'; 42; [1, 2, 3]}, 'VariableNames', {'MixedData'});

  • 缺失值

表格可以包含缺失值(NaN,Not a Number)或其他指定的缺失标记。

% 创建包含缺失值的表格
missingTable = table([1; NaN; 3], 'VariableNames', {'ColumnWithMissing'});

10. datetime(日期和时间):

存储日期和时间信息。在MATLAB中,datetime 是一种用于表示日期和时间的数据类型,它提供了处理日期和时间的丰富功能。

创建 datetime 对象

可以使用 datetime 函数来创建日期和时间对象:

% 创建当前日期和时间
currentDateTime = datetime;

% 根据字符串创建日期和时间
customDateTime = datetime('2023-11-15 12:30:00', 'Format', 'yyyy-MM-dd HH:mm:ss');

% 根据年、月、日、时、分、秒创建日期和时间
specificDateTime = datetime(2023, 11, 15, 12, 30, 0);

常见属性和方法

  • 属性:
    • Year, Month, Day, Hour, Minute, Second: 获取日期和时间的年、月、日、时、分、秒。
    • Format: 日期和时间的显示格式。
% 获取日期和时间的年份
yearValue = year(customDateTime);

  • 方法:
    • datevec: 将 datetime 转换为日期向量。
    • datestr: 将 datetime 转换为日期字符串。
    • days: 计算两个日期之间的天数差。
    • hours, minutes, seconds: 获取时间部分的小时、分钟、秒数。
% 将 datetime 转换为日期向量
dateVector = datevec(customDateTime);

时间运算

datetime 对象支持日期和时间的运算,可以方便地进行时间加减和计算时间间隔:

% 加减日期和时间
newDateTime = customDateTime + days(7);

% 计算时间间隔
timeDifference = newDateTime - customDateTime;

格式化显示

datetime 对象可以以不同的格式显示:

% 将 datetime 转换为日期字符串
dateString = datestr(customDateTime, 'yyyy/mm/dd HH:MM:SS');

处理缺失值

datetime 对象可以包含缺失值,用 NaT(Not a Time)表示:

% 创建包含缺失值的 datetime 对象
missingDateTime = NaT;

11. duration(持续时间):

存储时间间隔。

timeInterval = duration(0, 1, 30); % 0小时,1分钟,30秒

在MATLAB中,duration 是一种表示时间段的数据类型,用于存储时间的长度,以天、小时、分钟、秒为单位。duration 可以用于表示两个时间点之间的时间差,也可以与其他时间单位进行转换。以

创建 duration 对象

可以使用 duration 函数来创建时间段对象:

>> % 创建一分钟的时间段
oneMinute = duration(0, 1, 0)

% 创建一小时三十分钟五秒的时间段
customDuration = duration(1, 30, 5)

oneMinute = 

  duration

   00:01:00


customDuration = 

  duration

   01:30:05


常见属性和方法

  • 属性:
    • Days, Hours, Minutes, Seconds: 获取时间段的天数、小时数、分钟数、秒数。
% 获取时间段的分钟数
minutesValue = minutes(customDuration);

  • 方法:
    • plus, minus: 对时间段进行加法和减法操作。
    • abs: 获取时间段的绝对值。
    • between: 判断某个时间点是否在两个时间点之间。
% 计算时间段的绝对值
absoluteDuration = abs(customDuration);

时间运算

duration 对象支持时间段的运算,可以方便地进行加减和计算时间差:

% 加减时间段
newDuration = customDuration + oneMinute;

% 计算时间差
timeDifference = newDuration - customDuration;

格式化显示

duration 对象可以以不同的格式显示:

% 将 duration 转换为字符串
durationString = char(customDuration);

处理缺失值

duration 对象可以包含缺失值,用 NaT(Not a Time)表示。

12. function_handle(函数句柄):

存储指向函数的句柄。 在MATLAB中,function_handle 是一种特殊的数据类型,表示对函数的句柄或引用。通过函数句柄,您可以将函数作为变量传递、存储和调用。function_handle 类型通常用于创建函数句柄,以便在运行时动态地选择要调用的函数。

创建函数句柄

  • 指定函数名称:
funcHandle = @functionName;

  • 匿名函数:
funcHandle = @(x) x.^2;

函数句柄的用途

  • 传递函数作为参数:函数句柄允许您将函数作为参数传递给其他函数,实现更灵活的函数调用。
function result = applyFunction(func, x)
    result = func(x);
end

% 调用
squared = applyFunction(@(x) x.^2, 4);

  • 保存函数状态:函数句柄可以捕获创建时的工作区状态,包括变量和常量。
a = 2;
funcHandle = @(x) x + a;

a = 5; % 修改 a 的值
result = funcHandle(3); % 仍然使用创建时的 a 值(2)

  • 数组中的函数句柄:函数句柄可以存储在数组中,形成函数句柄数组。
funcArray = {@(x) x.^2, @(x) sqrt(x), @(x) sin(x)};
result = funcArray{2}(9); % 调用第二个函数

  • 处理不同函数的情况:函数句柄允许根据不同条件选择调用不同的函数。
condition = true;

if condition
    funcHandle = @(x) x + 1;
else
    funcHandle = @(x) x - 1;
end

result = funcHandle(3); % 结果根据条件选择调用的函数而变化

  • 函数句柄作为输出:函数可以返回函数句柄,使得调用方可以在不同情况下选择调用不同的函数。
function result = chooseFunction(option)
    if option == 1
        result = @(x) x.^2;
    else
        result = @(x) sqrt(x);
    end
end

func = chooseFunction(1);
output = func(4); % 调用 x.^2

13. cellstr(单元数组字符串):

在MATLAB中,cellstr 是一个用于将文本数组转换为单元字符串数组的函数。MATLAB中的字符串数组是字符数组的一种,而单元字符串数组是一种特殊的数组,其中每个元素都是一个字符串。

cellstr 函数的语法如下:

C = cellstr(A)

其中,A 是一个字符数组、字符向量或单元字符串数组,而 C 是一个单元字符串数组,其中包含了 A 中的每个元素。

例如,假设有一个字符数组:

>> charArray = ["apple"; "banana"; "orange"]

charArray = 

  3×1 string 数组

    "apple"
    "banana"
    "orange"

使用 cellstr 函数可以将其转换为单元字符串数组:

>> cellArray = cellstr(charArray)

cellArray =

  3×1 cell 数组

    {'apple' }
    {'banana'}
    {'orange'}


这样,cellArray 就是一个包含每个字符串的单元字符串数组。单元字符串数组在处理不定长度字符串或不同长度字符串时非常有用,因为每个元素可以包含不同长度的字符串。

需要注意的是,cellstr 主要用于将字符数组转换为单元字符串数组。如果要将其他类型的数据转换为字符串,可以使用 num2strint2strnum2cell 等函数,具体取决于数据类型。

14. categorical(分类数据):

categorical 数据类型用于处理有限个离散数值的数据。categorical 类型通常用于表示类别或标签,例如性别、颜色、评分等。

创建 Categorical 数组

  • 通过构造函数创建
>> categories = {'Category1', 'Category2', 'Category3'};
data = {'Category1'; 'Category2'; 'Category1'; 'Category3'};
c = categorical(data, categories);
>> c

c = 

  4×1 categorical 数组

     Category1 
     Category2 
     Category1 
     Category3 

  • 通过函数创建
categories = {'Category1', 'Category2', 'Category3'};
data = {'Category1'; 'Category2'; 'Category1'; 'Category3'};
c = categorical(data, categories);

Categorical 数组的属性和方法

  • 查看分类类别:
categories(c)

  • 查看分类的计数:
summary(c)

  • 修改分类的顺序:
newOrder = {'Category2', 'Category1', 'Category3'};
c = reordercats(c, newOrder);

  • 获取数值编码:
codes = double(c);

  • 修改 Categorical 数组的标签:
newLabels = {'Label1', 'Label2', 'Label3'};
c = renamecats(c, newLabels);

Categorical 数组的优势

  • 内存效率: categorical 类型可以显著减少存储相同类别的重复数据所需的内存。

  • 可读性: 使用 categorical 类型可以提高数据的可读性,因为它们允许您为类别分配更有意义的标签而不是数值编码。

  • 数据分析: 在某些情况下,categorical 类型可以提高数据分析的效率,例如在绘图或统计分析中。

  • 有序类别: categorical 类型可以是有序的,这对于表示有序类别(例如低、中、高)非常有用。

  • 避免错误: 使用 categorical 类型可以防止一些由于类别错误或拼写错误引起的问题,因为它限制了可以使用的类别。

15. containers.Map(映射):

存储键-值对的映射。containers.Map 是 MATLAB 中用于实现关联数组(associative arrays)或字典(dictionary)的数据结构。它提供了一种将键(keys)与值(values)关联起来的方式,使得通过键来检索值变得非常高效。

创建 containers.Map 对象

% 创建一个空的 containers.Map 对象
mapObj = containers.Map;

% 创建一个包含初始键值对的 containers.Map 对象
mapObj = containers.Map({'key1', 'key2', 'key3'}, {'value1', 'value2', 'value3'});

插入和访问元素

% 插入键值对
mapObj('newKey') = 'newValue';

% 访问值
value = mapObj('newKey');

移除元素

% 移除键值对
remove(mapObj, 'keyToRemove');

查询键或值

% 查询是否包含特定键
containsKey = isKey(mapObj, 'keyToCheck');

% 查询是否包含特定值
containsValue = ismember('valueToCheck', values(mapObj));

获取所有键、值或键值对

% 获取所有键
allKeys = keys(mapObj);

% 获取所有值
allValues = values(mapObj);

% 获取所有键值对
allKeyValuePairs = items(mapObj);

更新值

% 更新特定键对应的值
mapObj('existingKey') = 'updatedValue';

容器属性

  • 容器大小:
mapSize = length(mapObj);

  • 容器是否为空:
isEmpty = isempty(mapObj);

containers.Map 的用途

  • 快速查找: containers.Map 对象在查找特定键对应的值时非常高效,相比于使用数组或结构体,特别适用于大型数据集的快速查找操作。

  • 动态更新: 您可以方便地插入、删除和更新键值对,适用于需要动态维护键值关系的场景。

  • 数据关联: 适用于将一组键关联到相应的值,类似于字典或哈希表。

  • 无序性: containers.Map 对象的键是无序的,如果需要有序的键,可以通过 keys 函数获取键的列表,然后进行排序。

在这里插入图片描述

在这里插入图片描述


❗❗❗重要❗❗❗☞关注下方公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/659379.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python-合并排列数组 I

问题描述:合并两个按升序排列的整数数组a和b,形成一个新数组,新数组也要按升序排列。 问题示例:输入A[1],B[1],输出[1,1],返回合并后的数组。输入A[1,2,3,4],B[2,4,5,6],输出[1,2,2,3,4,4,5,6],返回合并所有元素后的数组。 完整代…

一个交易者的自白:念念不忘的交易,10个日内9个亏

一、新手: 面对爆仓,我像个白痴 我是在2012年开始接触的,这些年里我尝到了残酷失败的滋味,更品尝过胜利带来的喜悦。刚刚接触时很自信,总想着自己有一天一定会变成千万富翁的,用杠杆获取暴利。 在我首次爆仓的时候,我的…

前端Vue自定义轮播图组件的设计与实现

摘要 随着技术的发展,前端开发的复杂性日益增加。传统的整块应用开发方式在面对频繁的功能更新和修改时,往往导致整体逻辑的变动,从而增加了开发和维护的难度。为了应对这一挑战,组件化开发应运而生。本文将以Vue中的自定义轮播图…

01 Nginx安装部署(系列篇)

一、安装部署 1、Nginx的发行版本 常用版本分为四大阵营: Nginx 开源版 | https://nginx.org/:赤裸裸的Web服务器、反向代理、负载均衡(功能少,开发难度大) Nginx Plus 商业版 | https://www.nginx.com/:…

用易查分制作研学活动报名,支持在线签名,一键导出报名统计表格!

学校组织研学活动时,需要家长扫码在线填写报名信息,确认安全承诺和手写签名,提交报名后希望分配报名号,应该如何实现? 易查分的新建填表功能就可以实现上述需求,下面就来教大家如何制作吧。 📌使…

Django框架前后端通信打通实战(PyCharm高级版)

1.创建django项目并做好相关配置 首先在pycharm高级版中创建django项目 (1)选择左上角的四条小横线,然后找到文件下面的新建项目并点击,如下图: (2)点击完上图的新建项目之后,来到下面的页面. 然后点击左上角的Django,然后设置文件的位置,之后将模版文件夹的template这个单词…

网络智能化的发展对仿真环境的需求

1. 网络智能化背景介绍 1.1 什么是网络智能化 网络智能化是指利用人工智能(AI)、机器学习(ML)、优化算法等技术来实现网络的信息化、自动化和智能化。相对5G、6G、算力网络等领域,网络智能化是针对网络全场景、全要素…

通过花生壳对git服务器做内网穿透

很长一段时间内公司的git服务器只能够在公司内网访问,最近出差的同事比较多,通过外网访问git服务器的需求也迫在眉睫,于是选择了贝锐“花生壳”做内网穿透处理。 首先去贝锐官网购买花生壳映射,我选择的是个人标准版本&#xff0c…

AI绘画Stable Diffusion XL 可商用模型!写实艺术时尚摄影级真实感大模型推荐(附模型下载)

大家好,我是设计师阿威 大家在使用AI绘画的时候,是不是遇到这种问题:收藏的模型确实很多,可商用的没几个,而今天阿威将给大家带来的这款写实艺术时尚摄影级真实感大模型-墨幽人造人XL, 对于个人来讲完全是…

命运方舟 失落的方舟台服下载教程+账号注册教程(图文全攻略)

命运方舟 失落的方舟台服下载教程账号注册教程(图文全攻略) 失落的方舟,作为今年一款备受瞩目的MMORPG类型游戏,在官宣的时候就收获了一波不小的热度。这款游戏由游戏开发商Smile gate开发,游戏本体搭建于知名的虚幻引擎之上,为玩…

【网络原理】HTTPS详解

一.HTTPS的相关基本概念 HTTPS:由于HTTP协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况. 可能会出现运营商劫持,黑客入侵等不利影响, 因此就引入了HTTPS,其本质上就是在HTTP协议的基础上,引入了一个加密层SSM.什么是运营商劫持? 例如我们要…

最新!!2024上半年软考【高级】系统分析师 综合知识真题解析

2024上半年软考考试已经结束了,为大家整理了网友回忆版的系统分析师选择题真题及答案,总共30道题。 上半年考试的宝子们可以对答案预估分数!准备下半年考的宝子可以提前把握考试知识点和出题方向,说不定会遇到相同考点的题目&…

2024.5.20 学习记录

1、react 原理(jsx的本质、事件机制原理、setState和batch Update、组件渲染更新和diff算法、fiber) 2、代码随想录贪心刷题

使用递归形式以及迭代形式实现树的前中后序遍历

相信大家对于二叉树的遍历并不陌生,对于二叉树的递归遍历我们也可以信手拈来。但是如果让我们将二叉树修改成为非递归的形式呢?是不是有点疑惑了?那么本次博客我们就来梳理一下二叉树的非递归遍历。 由于递归遍历二叉树的代码以及逻辑都很简单…

Android Context 详解

一、什么是Context? Context是一个抽象基类。在翻译为上下文,是提供一些程序的运行环境基础信息。 Context下有两个子类,ContextWrapper是上下文功能的封装类(起到方法传递的作用,主要实现还是ContextImpl&#xff0…

操作系统实验三 可变分区内存分配首次适应算法模拟

实验三 可变分区内存分配首次适应算法模拟 实验内容 模拟内存分配,了解并掌握动态分区分配中所用的数据结构、分区分配算法,深刻理解首次适应内存分配算法。 模拟实现可变分区内存分配首次适应算法;空闲分区表要求有空闲块的起始地址、大小…

6.2 Go 切片(Slice)

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

惠海半导体 30V-60V-100V-150VMOS管 打火机、加湿器NMOS管 高耐压

MOS管的工作原理 MOS管,即金属-氧化物-半导体场效应晶体管,是一种重要的电子元件,在电路中起着关键的作用。其工作原理主要基于半导体材料的特性以及电场对电荷的控制。 首先,MOS管的基本结构包括源极、栅极和漏极。其中&#xf…

JUC框架(Future CompletableFuture详解)

文章目录 FutureFuture介绍Future原理Future代码示例 CompletableFutureCompletableFuture特点应用场景方法特性方法刨析supplyAsync/runAsyncthenApply / thenApplyAsync异步回调thenAccept / thenRunexceptionallywhenCompletehandle 实现场景 更多相关内容可查看 Future Fu…

实操专区-第15周-课堂练习专区-漏斗图与金字塔图

实操专区-第15周-课堂练习专区-漏斗图 下载安装ECharts,完成如下样式图形。 代码和截图上传 基本要求:下图3选1,完成代码和截图 完成 3.1.3.16 漏斗图中的任务点 基本要求:2个选一个完成,多做1个加2分。 请用班级学号姓…