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     23     4threeDArray(:,:,2) =5     67     8>> help catcat - 串联数组。此 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];
>> FF(:,:,1) =1     2     34     5     67     8     9F(:,:,2) =1     2     34     5     67     8     9F(:,:,3) =1     2     34     5     67     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     34     5     67     8     9>> subset = matrix(1:2, 2:3)subset =2     35     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 = bx =12>> 
  • 函数
% 求和
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 xName      Size            Bytes  Class     Attributesx         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 yName      Size            Bytes  Class     Attributesy         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 dName      Size            Bytes  Class    Attributesa         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 hName      Size            Bytes  Class     Attributese         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 strVarName         Size            Bytes  Class    AttributescharVar      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   243str5 =191   244   254   248   243str6 = "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 =logical0>> whos is_equalName          Size            Bytes  Class      Attributesis_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: 25city: 'New York'>> 
  • 使用点运算符,与建立普通数组一样,建立struct对象不需要事先声明,可以直接引用并动态扩充。
>> % 使用点运算符创建结构体
person.name = 'John';
person.age = 25;
person.city = 'New York';
>> personperson = 包含以下字段的 struct:name: 'John'age: 25city: 'New York'>> person.gender = 'girl';
>> personperson = 包含以下字段的 struct:name: 'John'age: 25city: '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 tableColumn1    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 tableColumn1    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 = duration00:01:00customDuration = duration01: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 conditionfuncHandle = @(x) x + 1;
elsefuncHandle = @(x) x - 1;
endresult = funcHandle(3); % 结果根据条件选择调用的函数而变化
  • 函数句柄作为输出:函数可以返回函数句柄,使得调用方可以在不同情况下选择调用不同的函数。
function result = chooseFunction(option)if option == 1result = @(x) x.^2;elseresult = @(x) sqrt(x);end
endfunc = 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);
>> cc = 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项目实战” 即可获取美哆商城视频资源!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode---栈与队列

232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int pee…

揭秘SQL中的公用表表达式:数据查询的新宠儿

欢迎来到我的博客,代码的世界里,每一行都是一个故事 揭秘SQL中的公用表表达式:数据查询的新宠儿 前言公用表表述的概述非递归CTE的作用递归CTE的作用CTE性能优化 前言 你是否曾经为SQL查询的复杂性而困扰不已?尤其是那些读写层子…

leetCode.84. 柱状图中最大的矩形

leetCode.84. 柱状图中最大的矩形 题目思路 代码 class Solution { public:int largestRectangleArea( vector<int>& h ) {int n h.size();vector<int> left( n ), right( n );stack<int> st;// 求每个矩形的第一个小于左边界的矩形 - 用单调栈for ( …

【云原生】kubernetes中Configmap原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

深入解读Meta分析:原理、公式、操作步骤及结果分析;R语言Meta回归分析、诊断分析、不确定性分析与精美作图

目录 专题一 Meta分析的选题与文献计量分析CiteSpace应用 专题二 Meta分析与R语言数据清洗及相关应用 专题三 R语言Meta分析与精美作图 专题四 R语言Meta回归分析 专题五 R语言Meta诊断分析与进阶 专题六 R语言Meta分析的不确定性及贝叶斯应用 专题七 深度拓展机器学习在…

HNU-计算机体系结构-实验1-RISC-V流水线

计算机体系结构 实验1 计科210X 甘晴void 202108010XXX 1 实验目的 参考提供为了更好的理解RISC-V&#xff0c;通过学习RV32I Core的设计图&#xff0c;理解每条指令的数据流和控制信号&#xff0c;为之后指令流水线及乱序发射实验打下基础。 参考资料&#xff1a; RISC-…

图形学初识--矩阵和向量

文章目录 前言正文向量什么是向量&#xff1f;向量涉及哪些常见计算&#xff1f;1、取模2、归一化3、向量加法4、向量减法5、向量与标量乘6、向量点乘&#xff08;内积&#xff09;7、向量投影 向量有哪些基本应用&#xff1f; 矩阵什么是矩阵&#xff1f;矩阵涉及哪些常见计算…

PyTorch张量索引用法速查

作为数据科学家或软件工程师&#xff0c;你可能经常处理大型数据集和复杂的数学运算&#xff0c;这些运算需要高效且可扩展的计算。PyTorch 是一个流行的开源机器学习库&#xff0c;它通过 GPU 加速提供快速灵活的张量计算。在本文中&#xff0c;我们将深入研究 PyTorch 张量索…

Ant Design 动态增减form表单,第二三项根据第一项选中内容动态展示内容

效果图&#xff1a; 选中第一项下拉框&#xff0c;第二第三项展示 点击添加条件&#xff0c;第二条仍然只展示第一项select框 后端返回数据格式&#xff1a; ruleList:[{name:通话时长,key:TALK_TIME,type&#xff1a;’INT‘,unitName:秒,operaObj:[{name:>,value:>…

【旋转链表】python

目录 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 题目&#xff1a; 思路&#xff1a; 求链表长度&#xff1b;找出倒数第 k1 个节点&#xff1b; 3.链表重整&#xff1a;将链表的倒数第 k1 个节点和倒数第 k个节点断开&#xff0c;并把后半部分拼接到链表的头部。…

基于STM32实现智能交通灯控制系统

目录 引言环境准备智能交通灯控制系统基础代码示例&#xff1a;实现智能交通灯控制系统 GPIO控制交通灯定时器配置与使用红外传感器检测车辆用户界面与显示应用场景&#xff1a;城市交通管理与自动化控制问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌…

python-合并排列数组 I

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

武汉城投城更公司与竹云科技签署战略协议,携手构建智慧城市新未来!

2024年5月16日&#xff0c;武汉城投城更公司与深圳竹云科技股份有限公司&#xff08;以下简称“竹云”&#xff09;签订战略合作协议&#xff0c;双方将深入推进产业项目合作。 签约现场&#xff0c;双方围绕产业项目合作方向、路径和内容等进行了全面深入交流。城投城更公司党…

JAVA学习路线图

计算机网课资料分享群&#xff1a;710895979

SQL注入攻击是什么?如何预防?

一、SQL注入攻击是什么&#xff1f; SQL注入攻击是一种利用Web应用程序中的安全漏洞&#xff0c;将恶意的SQL代码插入到数据库查询中的攻击方式。攻击者通过在Web应用程序的输入字段中插入恶意的SQL代码&#xff0c;然后在后台的数据库服务器上解析执行这些代码&#xff0c;从而…

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

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

P9 【力扣+知识点】【算法】【二分查找】C++版

【704】二分查找&#xff08;模板题&#xff09;看到复杂度logN&#xff0c;得想到二分 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0…

Django配置

后端开发&#xff1a; python 解释器、 pycharm 社区版、 navicate 、 mysql(phpstudy) 前段开发&#xff1a; vs code 、 google 浏览器 django 项目配置 配置项目启动方式 创建模型 创建一个应用 在应用中创建模型类 根据模型类生成数据表 创建应用 创建模型类 …

1218. 最长定差子序列

1218. 最长定差子序列 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;_1218最长定差子序列 错误经验吸取 原题链接&#xff1a; 1218. 最长定差子序列 https://leetcode.cn/problems/longest-arithmetic-subsequence-of-given-differen…

倒角距离【Chamfer Distance】

倒角距离&#xff08;chamfer distance&#xff09;是用于评估两组点之间的相似度的度量。给定两个点集 A 和 B&#xff0c;倒角距离定义为 A 中每个点到 B 中最近邻点的距离之和&#xff0c;加上 B 中每个点到 A 中最近邻点的距离之和。它用于各种应用&#xff0c;包括计算机视…