元胞数组是MATLAB中特有的一种数据类型,是数组的一种,其内部元素可以是属于不同的数据类型,概念理解上,可以认为它和c语言里面的结构体、c++里面的对象很类似。
介绍matlab 元包数组(cell)的使用方法与示例如下:
一、列举法定义元包数组
示例如下:
(1) 只有一个元素的元包数组,只含了向量[1,2,3]
a1={[1,2,3]}
输出:
(2)有3个元素的元包数组,分别是{1},{2},{3}
a2={1,2,3}
输出:
(3)有2个元素的元包数组,分别是[1,2],[3,4]
a3={[1,2],[3,4]}
输出:
(4)三个元素,类型可以不同
a4={1,2,[3,4]}
a5={1,2,{[3,4]}} %元包里面还可以包含元包
输出:
(5)定义2×2的元包数组
a6={1,3;2,4}
输出:
二、用cell定义
(1)A=cell(2,2) %定义2×2的元包
输出:
(2)赋值方式:
1、给元包数组的第一个元素赋值为数字2
A(1,1)={2}
A(1,2)={[2]}
A{2,1}=2
A{2,2}=[2]
%以上4种赋值方式效果是一样的。
输出:
2、将矩阵[1,2;3,4]赋值给A的第一行第一列的元素,即,使得这个元包里面包含一个矩阵
A(1,1)={[1,2;3,4]}
A{1,1}=[1,2;3,4]
输出:
3、将元包类型数据赋值给元包(元包里面嵌套元包)
%以下4种赋值方式是类似的,与前面的不一样,这里表示元包数组A的某个元素里面保存了元包数组类型
A{1,1}={2}
A{1,2}={[2]}
A{2,1}={[3,0]}
A{2,2}={[1,2;3,4]}
输出:
4、与3的区别在于这里A的每个元素里面保存了具有多个元素的元包数组,而上述3中A的元素里面的元包数组只有一个元素
A{1,1}=[1,{2}] %则A{1,1}表示{[1]},{[2]}
A{1,2}={1,{2}} %则A{1,2}表示{[1]},{{[2]}}
A{2,1}={[1,{2}]} %则A{2,1}表示{{[1]},{[2]}},不常用,比较复杂
A{2,2}={‘n’,1,[3,4],{[5,6,7]},@(x)x+1} %等号右边是由不同类型的数据组成的1行5列的元包数组,将整个元包数组保存于A{2,2}中
输出:
5、查询A中的元素
A(2,2) %这表示元包
A{2,2} %这表示元包里面的数据
A{2,2}{1} %表示A的第二行第二列的元素里面的元包所包含的矩阵[1,2;3,4]
A{2,2}(1) %表示A的第二行第二列的元素里面的整个元包
输出:
注意:
A(1,1)=2 %这样写是错的,因为A(1,1)表示元包类型,而3是double型,不是元包。
更多用法参考MathWorks:https://ww2.mathworks.cn/help/matlab/ref/cell.html
所有代码:
clc,clear
%小括号表示元包的第几个元素,大括号表示元包的第几个元素里面的内容
a1={[1,2,3]} %元包数组只有一个元素,其里面只包含了向量[1,2,3]
a2={1,2,3} %元包数组具有三个元素,分别是{1},{2},{3}
a3={[1,2],[3,4]} %元包数组具有两个元素
a4={1,2,[3,4]} %元包数组具有三个元素,不同的元素所含数据的类型可以不同
a5={1,2,{[3,4]}} %元包数组的元素还可以是元包
a6={1,3;2,4} %定义2×2的元包数组
b=cell(3,1) %定义3行1列的元包数组
A=cell(2,2) %定义2×2的元包数组
%A(1,1)=2 %这样写是错的,因为A(1,1)表示元包类型,而2是double型,不是元包
%以下4种赋值方式是一样的
A(1,1)={2}
A(1,2)={[2]}
A{2,1}=2
A{2,2}=[2]
A(1,1) %这表示元包
A{1,1} %这表示元包里面的数据
%将矩阵[1,2;3,4]赋值给A的第一行第一列的元素,即使得这个元包里面是一个矩阵
A(1,1)={[1,2;3,4]}
A{1,1}=[1,2;3,4]
%以下4种赋值方式是类似的,与前面的不一样,这里表示元包数组的某个元素里面保存了元包数组类型
A{1,1}={2}
A{1,2}={[2]}
A{2,1}={[3,0]}
A{2,2}={[1,2;3,4]}
A{2,2}{1} %表示A的第二行第二列的元素里面的元包所包含的矩阵[1,2;3,4]
A{2,2}(1) %表示A的第二行第二列的元素里面的整个元包
A{1,1}=[1,{2}] %则A{1,1}表示{[1]},{[2]}
A{1,2}={1,{2}} %则A{1,2}表示{[1]},{{[2]}}
A{2,1}={[1,{2}]} %则A{2,1}表示{{[1]},{[2]}},不常用,比较复杂
A{2,2}={'n',1,[3,4],{[5,6,7]},@(x)x+1} %等号右边是由不同类型的数据组成的1行5列的元包数组,将整个元包数组保存于A{2,2}中