clear A %按单元索引法赋值
A(1,1)={[1 2 3;4 5 6; 7 8 9]};
A(1,2)={1+2i};
A(2,1)={'hello world'};
A(2,2)={0:pi/3:pi};
clear B %按内容索引法赋值
B{1,1}=[1 2 3;4 5 6;7 8 9];
B{1,2}=3+4i;
B{2,1}='hello world';
B{2,2}=0:2:9;
% 使用B(2,:)可以提取B cell array中第二行中所有的元素,:表示取所有的列
C=[A;B] % 将A元胞数组中的所有元素和B元胞数组中的所有元素相拼接
sprintf('C(i)表示遍历C数组中的所有个体元素')
for i =1:8
C{i}
end
sprintf('C(3,1)')
sprintf('%f',C{3,1}) % 表示取第三行的第一个元素
sprintf('C(i,:)表示遍历C数组中的所有行元素')
for i=1:4
C{i,:}
end
% sprintf('C(3,1) %f',C(3,1)) % 表示取第三行的第一个元素 这是一种错误的写法,这种写法会报错误
C =
[3x3 double] [1.0000 + 2.0000i]
'hello world' [1x4 double]
[3x3 double] [3.0000 + 4.0000i]
'hello world' [1x5 double]
ans =
C(i)表示遍历C数组中的所有个体元素
ans =
1 2 3
4 5 6
7 8 9
ans =
hello world
ans =
1 2 3
4 5 6
7 8 9
ans =
hello world
ans =
1.0000 + 2.0000i
ans =
0 1.0472 2.0944 3.1416
ans =
3.0000 + 4.0000i
ans =
0 2 4 6 8
ans =
C(3,1)
ans =
1.0000004.0000007.0000002.0000005.0000008.0000003.0000006.0000009.000000
ans =
C(i,:)表示遍历C数组中的所有行元素
ans =
1 2 3
4 5 6
7 8 9
ans =
1.0000 + 2.0000i
ans =
hello world
ans =
0 1.0472 2.0944 3.1416
ans =
1 2 3
4 5 6
7 8 9
ans =
3.0000 + 4.0000i
ans =
hello world
ans =
0 2 4 6 8
format compact
A1=cell(1)
A2=cell(2)
A3=cell(3) % 默认初始化为方阵
A=cell(2,3)
size(A)%计算单元数组A的大小
B=reshape(A,3,2)%改变结构后的单元数组
C1=repmat(B,1,2)
C2=repmat(B,3,2)
A1 =
{[]}
A2 =
[] []
[] []
A3 =
[] [] []
[] [] []
[] [] []
A =
[] [] []
[] [] []
ans =
2 3
B =
[] []
[] []
[] []
C1 =
[] [] [] []
[] [] [] []
[] [] [] []
C2 =
[] [] [] []
[] [] [] []
[] [] [] []
[] [] [] []
[] [] [] []
[] [] [] []
[] [] [] []
[] [] [] []
[] [] [] []
a=ones(3,4);
b=zeros(3,2);
c=(5:6)';
X={a b c}
celldisp(X)
X =
[3x4 double] [3x2 double] [2x1 double]
X{1} =
1 1 1 1
1 1 1 1
1 1 1 1
X{2} =
0 0
0 0
0 0
X{3} =
5
6
a=ones(3,4);
b=zeros(3,2);
c=(5:6)';
X={a b c};
% celldisp(X);
iscell(a)
iscell(X)
ans =
0
ans =
1
A = 3.1416;
tf1 = isa(A,'double')
tf2 = isa(A,'int')
tf1 =
1
tf2 =
0
A = cellfun(func,C)
A = cellfun(func,C1,…,Cn)
A = cellfun( ___ ,Name,Value )
[ A1,…,Am ] = cellfun( ___ )
您不能指定 cellfun 计算 A 的各元素的顺序,也不能指望它们按任何特定的顺序完成计算。
A = cellfun(func,C1,…,Cn) 将 func 应用于 C1,…,Cn 的各元胞的内容,因此 A(i) = func(C1{i},…,Cn{i})。函数 func 必须接受 n 个输入参数并返回一个标量。元胞数组 C1,…,Cn 的大小必须全部相同
A = cellfun ( ___ ,Name,Value ) 应用 func 并使用一个或多个 Name,Value 对组参数指定其他选项。例如,要以元胞数组形式返回输出值,请指定 ‘UniformOutput’,false。当 func 返回的值不能串联成数组时,可以按元胞数组的形式返回 A。您可以将 Name,Value 对组参数与上述任何语法中的输入参数结合使用。
当 func 返回 m 个输出值时,[A1,…,Am] = cellfun( ___ ) 返回多个输出数组 A1,…,Am。func 可以返回不同数据类型的输出参数,但每次调用 func 时返回的每个输出的数据类型必须相同。您可以将此语法与前面语法中的任何输入参数结合使用。从 func 返回的输出参数的数量不必与 C1,…,Cn 指定的输入参数的数量相同。
创建一个元胞数组,其中包含不同大小的数值数组。
C = {1:10, [2; 4; 6], []}
C = 1x3 cell array
{1x10 double} {3x1 double} {0x0 double}
计算每个数值数组的均值,然后以数组的形式返回这些均值。
A = cellfun(@mean,C)
A = 1×3
5.5000 4.0000 NaN
创建两个元胞数组,其中包含不同大小的数值数组。
X = {5:5:100, 10:10:100, 20:20:100};
Y = {rand(1,20), rand(1,10), rand(1,5)};
绘制数组。从 plot 函数返回图形线条对象数组,并使用这些对象为每一组数据点添加不同的标记。cellfun 可以返回任何数据类型的数组,只要该数据类型的对象可以串联即可。
figure
hold on
p = cellfun(@plot,X,Y);
p(1).Marker = 'o';
p(2).Marker = '+';
p(3).Marker = 's';
hold off
创建一个元胞数组,其中包含不同大小的数值数组。
C = {1:10, [2; 4; 6], []}
C = 1x3 cell array
{1x10 double} {3x1 double} {0x0 double}
计算 C 中每个数组的大小。行数和列数分别输出在两个 1×3 数值数组中。
[nrows,ncols] = cellfun(@size,C)
nrows = 1×3
1 3 0
ncols = 1×3
10 1 0
C = {'Monday','Tuesday','Wednesday','Thursday','Friday'}
C = 1x5 cell array
{'Monday'} {'Tuesday'} {'Wednesday'} {'Thursday'} {'Friday'}
使用 cellfun 函数为这些名称创建三个字母的缩写。指定一个函数,以提取前三个字符并将它们以字符向量的形式返回。要以元胞数组的形式返回这些缩写,请指定 'UniformOutput',false 名称-值对组。
A = cellfun(@(x) x(1:3),C,'UniformOutput',false)
A = 1x5 cell array
{'Mon'} {'Tue'} {'Wed'} {'Thu'} {'Fri'}
为了实现兼容性,cellfun 将字符串数组的每个元素视为一个字符向量。如果您指定返回文本的函数,cellfun 将以字符向量元胞数组而不是字符串数组的形式返回文本。 " 'UniformOutput',false "
使用 cellfun 为字符串数组中的名称创建缩写。
str = ["Saturday","Sunday"]
str = 1x2 string array
"Saturday" "Sunday"
B = cellfun(@(x) x(1:3),str,'UniformOutput',false)
B = 1x2 cell array
{'Sat'} {'Sun'}
C = num2cell(A)
C = num2cell(A,dim)
将一个数值数组的所有元素放入单独的元胞。
a = magic(3)
a = 3×3
8 1 6
3 5 7
4 9 2
c = num2cell(a)
c = 3x3 cell array
{[8]} {[1]} {[6]}
{[3]} {[5]} {[7]}
{[4]} {[9]} {[2]}
将一个单词的各个字母放入数组的各个元胞中。
a = ['four';'five';'nine']
a = 3x4 char array
'four'
'five'
'nine'
c = num2cell(a)
c = 3x4 cell array
{'f'} {'o'} {'u'} {'r'}
{'f'} {'i'} {'v'} {'e'}
{'n'} {'i'} {'n'} {'e'}
A = reshape(1:12,4,3);
A(:,:,2) = A*10
A =
A(:,:,1) =
1 5 9
2 6 10
3 7 11
4 8 12
A(:,:,2) =
10 50 90
20 60 100
30 70 110
40 80 120
C = num2cell(A,1)
C = 1x3x2 cell array
C(:,:,1) =
{4x1 double} {4x1 double} {4x1 double}
C(:,:,2) =
{4x1 double} {4x1 double} {4x1 double}
每个 4×1 向量包含沿 A 的第一维度的元素:
C{1}
ans = 4×1
1
2
3
4
创建 1×3 数值数组的 4×1×2 元胞数组。
C = num2cell(A,2)
C = 4x1x2 cell array
C(:,:,1) =
{1x3 double}
{1x3 double}
{1x3 double}
{1x3 double}
C(:,:,2) =
{1x3 double}
{1x3 double}
{1x3 double}
{1x3 double}
每个 1×3 行向量包含沿 A 的第二维度的元素:
C{1}
ans = 1×3
1 5 9
创建 1×1×2 数值数组的 4×3 元胞数组。
C = num2cell(A,3)
C = 4x3 cell array
{1x1x2 double} {1x1x2 double} {1x1x2 double}
{1x1x2 double} {1x1x2 double} {1x1x2 double}
{1x1x2 double} {1x1x2 double} {1x1x2 double}
{1x1x2 double} {1x1x2 double} {1x1x2 double}
每个 1×1×2 向量包含沿 A 的第三维度的元素:
C{1}
ans =
ans(:,:,1) =
1
ans(:,:,2) =
10
A = reshape(1:12,4,3);
A(:,:,2) = A*10
A =
A(:,:,1) =
1 5 9
2 6 10
3 7 11
4 8 12
A(:,:,2) =
10 50 90
20 60 100
30 70 110
40 80 120
c = num2cell(A,[1 3])
c = 1x3 cell array
{4x1x2 double} {4x1x2 double} {4x1x2 double}
每个 4×1×2 数组包含沿 A 的第一维度和第三维度的元素:
c{1}
ans =
ans(:,:,1) =
1
2
3
4
ans(:,:,2) =
10
20
30
40
c = num2cell(A,[2 3])
c = 4x1 cell array
{1x3x2 double}
{1x3x2 double}
{1x3x2 double}
{1x3x2 double}