版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
单元数组
语法知识
单元数组
单元数组是一种MATLAB数组,它的每一元素是单元,在单元里可以保存各种类型的MATLAB数组。例如单元数组、实数矩阵、文本字符串数组、结构数组以及其他复数向量等。下表为2行3列单元数组的例子:
单元数组的创建:
可以通过对单元数组的赋值来创建单元数组,也可以对单元数组的预分配来创建,对于单元数组的预分配的书写格式为:
单元数组的赋值可以通过两种方式来进行。
(1)下标索引。与数组表示方法相类似,用圆括号内的下标来显示单元号。在等式右端用花括号把单元的内容括起来。例如一个2行2列的单元数组,赋值如下:
(2)单元索引。将单元数组的单元号用花括号括起来,在等式右侧写入单元的内容。同上例:
对于单元数组中,单元中的单元数组称为嵌套的单元数组或称为单元数组的子集。对于子集的赋值可以通过在两次单元索引(两次索引仍用花括号)的等式右侧赋值。如下:
单元数组的删除和改写
与一般数组相似,可以用赋值空矩阵来删除单元数组的某单元。亦可以用reshape来改写矩阵。将在实例演练中练习。
单元数组的运算
单元数组中的数值矩阵仍符合数值矩阵的运算规则,对于字符数组则仍符合字符数组的运算规则。同样在例子中观察。
实例演练
1.下标索引赋值
>> A(1,1)={magic(3)};
>> A(1,2)={'10/1/2004'};
>> A(2,1)={1:5};
>> A(2,2)={[1+2*i 2-3*i;2+3*i 1-2*i]};
>> A
A =
2×2 cell 数组
{3×3 double} {'10/1/2004'}
{1×5 double} {2×2 double }
>> celldisp(A)
A{1,1} =
8 1 6
3 5 7
4 9 2
A{2,1} =
1 2 3 4 5
A{1,2} =
10/1/2004
A{2,2} =
1.0000 + 2.0000i 2.0000 - 3.0000i
2.0000 + 3.0000i 1.0000 - 2.0000i
2.单元索引赋值
>> A{1,1}=magic(3);
>> A{1,2}='10/1/2004';
>> A{2,1}=1:5;
>> A{2,2}=[1+2*i 2-3*i;2+3*i 1-2*i];
>> celldisp(A)
A{1,1} =
8 1 6
3 5 7
4 9 2
A{2,1} =
1 2 3 4 5
A{1,2} =
10/1/2004
A{2,2} =
1.0000 + 2.0000i 2.0000 - 3.0000i
2.0000 + 3.0000i 1.0000 - 2.0000i
3.嵌套单元数组的赋值
>> C{1,1}=magic(3);
>> C{1,2}=strvcat('John Smith','3/8/2005','Class||');
>> C{2,1}=[1.4,2.8,3.3,5.6];
>> C{2,2}=[2 3 4;3 6 10;4 10 20];
>> C{2,3}{1,1}='text';
>> C{2,3}{1,2}=[4 2;1 5];
>> C{2,3}{2,1}=[4 2 7];
>> C{2,3}{2,2}=[0.5+6*i];
>> C{1,2}=[2+i 1-2*i;1+2*i 2-i];
>> C
C =
2×3 cell 数组
{3×3 double} {2×2 double} {0×0 double}
{1×4 double} {3×3 double} {2×2 cell }
>> celldisp(C)
C{1,1} =
8 1 6
3 5 7
4 9 2
C{2,1} =
1.4000 2.8000 3.3000 5.6000
C{1,2} =
2.0000 + 1.0000i 1.0000 - 2.0000i
1.0000 + 2.0000i 2.0000 - 1.0000i
C{2,2} =
2 3 4
3 6 10
4 10 20
C{1,3} =
[]
C{2,3}{1,1} =
text
C{2,3}{2,1} =
4 2 7
C{2,3}{1,2} =
4 2
1 5
C{2,3}{2,2} =
0.5000 + 6.0000i
4.单元数组的删除
>> A={magic(3),'10/1/2005','name_Wang';[1,3,5,7],eye(3),'$5000'}
A =
2×3 cell 数组
{3×3 double} {'10/1/2005'} {'name_Wang'}
{1×4 double} {3×3 double } {'$5000' }
>> A{1,1}=[]
A =
2×3 cell 数组
{0×0 double} {'10/1/2005'} {'name_Wang'}
{1×4 double} {3×3 double } {'$5000' }
>> A{2,1}=[]
A =
2×3 cell 数组
{0×0 double} {'10/1/2005'} {'name_Wang'}
{0×0 double} {3×3 double } {'$5000' }
>> A{2,2}=[]
A =
2×3 cell 数组
{0×0 double} {'10/1/2005'} {'name_Wang'}
{0×0 double} {0×0 double } {'$5000' }
5.单元数组的修改
>> A=cell(4,6)
A =
4×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}
{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}
>> B=reshape(A,3,8)
B =
3×8 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} {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=B(:,4:8)
C =
3×5 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} {0×0 double} {0×0 double} {0×0 double}
6.单位数组的运算
>> A=cell(2,3)
A =
2×3 cell 数组
{0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double}
>> A{1,1}=rand(2,3);
>> A{1,2}=rand(3,2);
>> A{2,1}=[1 3 5 7];
>> A{2,2}=1:4;
>> A{1,3}=A{1,1}*A{1,2};
>> A{2,3}=conv(A{2,1},A{2,2})
A =
2×3 cell 数组
{2×3 double} {3×2 double} {2×2 double}
{1×4 double} {1×4 double} {1×7 double}
>> celldisp(A)
A{1,1} =
0.8147 0.1270 0.6324
0.9058 0.9134 0.0975
A{2,1} =
1 3 5 7
A{1,2} =
0.2785 0.9649
0.5469 0.1576
0.9575 0.9706
A{2,2} =
1 2 3 4
A{1,3} =
0.9018 1.4199
0.8452 1.1126
A{2,3} =
1 5 14 30 41 41 28
关于卷积运算可参考:https://blog.csdn.net/qq_32846595/article/details/79053277