元胞数组
MATLAB中的元胞数组(Cell arrays)是一个灵活的数据类型,可以用来存储异构类型的数据。一个元胞数组可以包含各种类型的数据,如数字、字符串、矩阵等,而每个单元都可以有自己的数据类型和大小。
创建元胞数组
最常见的方法是使用cell
函数。下面是创建一个2x3元胞数组的例子:
C = cell(2,3);
另一种创建元胞数组的方法是直接使用{}
:
C = {1, 'a'; [1 2 3], magic(3)}
在这个例子中,C
是一个2x2元胞数组,其中包含一个整数、一个字符串、一个行向量和一个3x3的魔术方阵。
访问元胞数组
我们可以使用访问元素的索引来获取元胞数组中的值:
value = C{1, 2};
这个例子返回C
的第一行,第二列元素的内容。
修改元胞数组
我们可以通过索引直接修改元胞数组中的值。例如,我们可以改变C
的第一行,第二列元素的内容为'b'
:
C{1, 2} = 'b';
循环访问元胞数组
我们可以使用for
循环来遍历元胞数组中的每一个元素:
for i = 1:numel(C)
disp(C{i})
end
练习:
A = cell(2,6) %%生成一个一行六列的元胞数组,可以理解为就是个
C = {1, 'a'; [1 2 3], magic(3)} %%2x2的元胞数组
A{1,2} = eye(3) %%就是主对角元素都是一的2x2矩阵,单位阵
A{2,3} = magic(5) %%生成一个五行五列的幻方矩阵,幻方:每个行向量元素的数值的和与每个列向量的和的数值相同
B = A{2,3} %就可以打印处那个幻方了
输出结果:
A元胞数组的结构:
A{1,2}:
A{2,3}:
元胞数组C:
A =
2×6 cell 数组
{0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
C =
2×2 cell 数组
{[ 1]} {'a' }
{[1 2 3]} {3×3 double}
A =
2×6 cell 数组
{0×0 double} {3×3 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
A =
2×6 cell 数组
{0×0 double} {3×3 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {5×5 double} {0×0 double} {0×0 double} {0×0 double}
B =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>>
结构体
在理解了c语言的结构体那么matlab的结构体就非常容易理解
在MATLAB中,结构体是一个高级数据类型,用于封装可能具有不同数据类型(如整数、浮点数、字符向量、其他结构体等)的与之关联的一种特殊类型的数据。每个这样的数据项都称为结构体的一项或域。
以下是如何创建和操作MATLAB结构体的方式:
- 创建:
在MATLAB中,我们可以创建一个名为struct_name
的空结构体:
struct_name = struct;
要添加域,或者在创建时具有初始化值的域,我们可以这样做:
struct_name.field1 = 'value1';
struct_name.field2 = 123456;
struct_name.field3 = [2 3 2];
或者一次性初始化:
struct_name = struct('field1', 'value1', 'field2', 123456, 'field3', [2 3 2]);
- 访问结构体中的值:
可以通过以下方式访问结构体中的数据:
x = struct_name.field1; % 访问field1 并将它赋值为x
- 修改结构体中的值:
可以通过以下方式修改结构体中的值:
struct_name.field1 = 'new value'; % 修改field1的值
- 删除结构体的字段:
可以这样删除字段:
struct_name = rmfield(struct_name,'field1'); %删除结构struct_name中的字段'field1'
- 检查是否存在字段:
在访问结构体的元素或者删除之前,我们一般都会检查该字段是否存在。这样可以避免程序出错:
if isfield(struct_name, 'field1')
struct_name = rmfield(struct_name,'field1');
end
练习1:
%%初始化结构体
struct_test1 = struct;%%创建结构体 结构体名 = 结构体类型名
%%第一种方式初始化结构体
struct_test1.field1 = 'value1'; %%结构体的第一个部分
struct_test1.field2 = 123456; %%结构体的第二个部分
struct_test1.field3 = [2 3 2]; %%结构体的第三个部分
%%第二种方式初始化结构体
%%struct_name = struct('命名1', '变量', '命名2', 变量, '命名3', 变量);
struct_test2 = struct('value', 'value1', 'int', 123456, 'vector', [2 3 2]);
struct_test1 = rmfield(struct_test1,'field1'); %%删除结构struct_name中的字段'field1'
struct_test1.field1 = 'value2';
输出结果
多维元胞数组:
books = struct("name",{["机器学习" "人工智能"]},"price",[30,40]);
books ;
输出结果:
name: ["机器学习" "人工智能"]
price: [30 40]