如何解决大模型的「幻觉」问题?

在这里插入图片描述

欢迎关注博主 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/290102.html

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

相关文章

【12】ES6:模块化

一、JavaScript 模块化 JavaScript 模块化是一种组织和管理 JavaScript 代码的方法,它将代码分割为独立的模块,每个模块都有自己的作用域,并且可以导出和导入功能。模块化可以提高代码的可维护性、可重用性和可扩展性。 在JavaScript中&…

FCN学习-----第一课

语义分割中的全卷积网络 CVPR IEEE国际计算机视觉与模式识别会议 PAMI IEEE模式分析与机器智能汇刊 需要会的知识点: 神经网络:前向传播和反向传播 卷积神经网络:CNN,卷积,池化,上采样 分类网络&#xff1a…

CCF模拟题 202312-1 仓库规划

问题描述 试题编号: 202312-1 试题名称: 仓库规划 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 输入格式 输出格式 样例输入 4 2 0 0 -1 -1 1 2 0 -1样例输出 3 1 0 3样例解释 Java实现代码: import …

Spring高手之路-Spring Bean、Java Bean和对象的区别与联系

目录 什么是Spring Bean 什么是Java Bean 什么是对象 Spring Bean与Java Bean与对象的联系与区别 联系 区别 什么是Spring Bean 在Spring官方文档中对Bean的解释如下: In Spring, the objects that form the backbone of your application and that are manage…

贪吃蛇C语言实现(有源码)

前言 之前学了一点easyx图形库的使用&#xff0c;掌握一些基本用法后就用贪吃蛇来进行实战了&#xff0c;运行视频放在csdn视频那一栏了&#xff0c;之前的烟花也是。 1.头文件 #define _CRT_SECURE_NO_WARNINGS 1 #include<easyx.h> #include<conio.h> #includ…

odoo17 | 基本视图

前言 我们在上一章中已经看到Odoo能够为给定模型生成默认视图。在实践中&#xff0c;默认视图是绝对不可接受的用于商业应用程序。相反&#xff0c;我们至少应该以逻辑方式组织各种字段。 视图在带有动作和菜单的XML文件中定义。它们是ir.ui.view模型的实例。 在我们的房地产…

YOLO+SlowFast+DeepSORT 简单实现视频行为识别

前段时间刷短视频看到过别人用摄像头自动化监控员工上班状态&#xff0c;比如标注员工是不是离开了工位&#xff0c;在位置上是不是摸鱼。虽然是段子&#xff0c;但是这个是可以用识别技术实现一下&#xff0c;于是我在网上找&#xff0c;知道发现了 SlowFast&#xff0c;那么下…

Sharding-JDBC快速使用【笔记】

1 引言 最近在使用Sharding-JDBC实现项目中数据分片、读写分离需求&#xff0c;参考官方文档&#xff08;Sharding官方文档&#xff09;感觉内容庞杂不够有条理&#xff0c;重复内容比较多&#xff1b;现结合项目应用整理笔记如下供大家参考和自己回忆使用&#xff1b; 在…

苹果手机数据删除怎么恢复?这几个方法值得一试!

不小心删除了iPhone里的照片&#xff1f;别担心&#xff0c;数据恢复是有可能的&#xff01; 从这里&#xff0c;你可以找到你的备份并恢复丢失的数据。如果你没有备份&#xff0c;那么数据恢复软件可能可以帮助你。它们可以扫描你的iPhone或iTunes备份&#xff0c;找到你删除…

打字练习(Python代码模拟打字练习软件效果)

Python代码模拟打字练习软件效果&#xff0c;循环进行单行打字练习&#xff0c;结束时输出平均速度和综合正确率。 (笔记模板由python脚本于2024年01月03日 22:36:34创建&#xff0c;本篇笔记适合熟悉Python字符串和列表基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 P…

如何利用Oracle官方网站不登录账号下载和安装非最新版本的JDK(版本自由选择)

一、JDK概述 JDK&#xff08;Java Development Kit&#xff09;是Java开发工具集&#xff0c;是针对Java编程语言的软件开发环境。它包含了Java编译器、JRE&#xff08;Java运行时环境&#xff09;以及其他一些用于开发、调试和测试Java应用程序的工具&#xff0c;是Java开发人…

通用Mapper怎么开接口扫描

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

三维模型数据的几何坐标变换的点云重建并行计算技术方法分析

三维模型数据的几何坐标变换的点云重建并行计算技术方法分析 倾斜摄影三维模型数据的几何坐标变换与点云重建并行计算技术的探讨主要涉及以下几个方面&#xff1a; 1、坐标系定义与转换&#xff1a;在进行坐标变换前&#xff0c;需要确定各个参考系的定义并实现坐标系之间的转…

[Angular] 笔记 15:模板驱动表单 - 表单验证

油管视频&#xff1a; Form Validation 有三种类型的验证&#xff1a; valid, pristine(是否被编辑过&#xff0c;被改过)&#xff0c;以及 touched 相反的属性&#xff1a; invalid, dirty, untouched pokemon-template-form.component.html 代码修改&#xff1a; 任何时候…

geemap学习笔记040:GEE中样本点选择操作流程

前言 geemap中目前有一个bug&#xff0c;就是在选择样本点的时候不合理&#xff0c;选完一类样本之后&#xff0c;没法继续选择下一类&#xff0c;并且没法在线进行编辑和修改。因此目前就只能结合在线版的GEE进行样本选择&#xff0c;本节就详细的介绍一下GEE中样本点的选择过…

Transformer 架构解释

一、说明 变形金刚是机器学习的一个新发展&#xff0c;最近引起了很大的轰动。他们非常善于跟踪上下文&#xff0c;这就是为什么他们写的文本有意义。在本章中&#xff0c;我们将介绍它们的体系结构以及它们的工作原理。 amanatulla1606 Transformer 模型是机器学习中最令人兴奋…

机器学习期末复习

机器学习 选择题名词解释&#xff1a;简答题计算题一、线性回归二、决策树三、贝叶斯 选择题 机器学习利用经验 &#xff0c;须对以下&#xff08;&#xff09;进行分析 A 天气 B 数据 C 生活 D 语言 归纳偏好值指机器学习算法在学习的过程中&#xff0c;对以下&#xff08;&a…

酷开系统小酷少儿重磅升级!陪伴孩子美好童年!

孩子的成长总是匆匆太匆匆&#xff0c;父母们应该放慢脚步&#xff0c;感悟童心。用心灵和智慧陪伴孩子&#xff0c;在孩子的心中没有什么比幸福的家庭更重要&#xff0c;没有什么比父母的陪伴更美好&#xff01;酷开系统少儿频道全面升级&#xff01;让酷开系统小酷少儿陪伴成…

设计模式篇章(1)——理论基础

设计模式&#xff1a;在软件开发中会面临许多不断重复发生的问题&#xff0c;这些问题可能是代码冗余、反复修改旧代码、重写以前的代码、在旧代码上不断堆新的代码&#xff08;俗称屎山&#xff09;等难以扩展、不好维护的问题。因此1990年有四位大佬&#xff08;GoF组合&…

ant design pro 5 企业级后台前端框架自定义根路径设置,解决public文件夹下资源在打包部署后出现找不到的问题

关于ant design pro v5的开箱使用方法见&#xff1a;开箱即用的企业级数据和业务管理中后台前端框架Ant Design Pro 5的开箱使用和偏好配置-CSDN博客 在开发过程中为了方便我们可能会将部分静态资源如logo等放入public文件夹&#xff0c;但在设置站点根路径后&#xff0c;publi…