目录
num2cell函数是将数组转换为相同大小的元胞数组。
语法
C = num2cell(A)
C = num2cell(A,dim)
- 输入,指定为任何类型的多维数组。
- A的维度,指定为正整数或正整数向量。
dim
必须介于 1 和ndims
(A
) 之间。各元素不需要按照数值顺序排列。但是num2cell
会置换C中每个元胞的数组维度以便与指定维度的顺序相匹配。 - 生成的数组,以元胞数组的形式返回。
C
的大小取决于A的大小和dim的值。
-
如果未指定
dim
,则C
的大小与A
相同。 -
如果
dim
是标量,则C
包含numel(A)/size(A,dim)
元胞。如果dim
是 1 或 2,则每个元胞分别包含一个列向量或行向量。如果dim
> 2,则每个元胞包含一个第dim
维的长度为size(A,dim)
的数组,并且其他维度都是单一维度。例如,给定一个 4×7×3 数组
A
,此图窗将显示num2cell
如何创建与dim
值1
、2
和3
相对应的元胞。 -
如果
dim
是包含N
个值的向量,则C
具有numel(A)/prod([size(A,dim(1)),...,size(A,vdim(N))])
个元胞。每个元胞都包含一个第dim
(i)
维的长度为size(A,dim(i))
并且其他维度为单一维度的数组。例如,给定一个 4×7×3 数组,可以将
dim
指定为一个正整数向量以创建不同维度的元胞数组。
说明
C = num2cell(A) 通过将 A 的每个元素放置于 C 的一个单独元胞中,来将数组 A 转换为元胞数组 C。num2cell 函数转换具有任意数据类型(甚至是非数值类型)的数组。
C = num2cell(A,dim) 将 A 的内容划分成 C 中单独的元胞,其中 dim 指定每个元胞包含 A 的哪个维度。dim 可以是维度的标量或向量。例如,如果 A 有 2 行 3 列,那么:
num2cell(A,1)
创建一个 1×3 元胞数组C
,其中每个元胞包含A
的 2×1 列。
num2cell(A,2)
创建一个 2×1 元胞数组C
,其中每个元胞包含A
的 1×3 行。
num2cell(A,[1 2])
创建一个 1×1 元胞数组C
,其中每个元胞包含A
整个数组。
示例
将数组转换为元胞数组
将一个数值数组的所有元素放入单独的元胞。
a = magic(3)
a = 3×3
8 1 6
3 5 7
4 9 2
使用函数得:
c = num2cell(a)
c=3×3 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
{'f'} {'o'} {'u'} {'r'}
{'f'} {'i'} {'v'} {'e'}
{'n'} {'i'} {'n'} {'e'}
创建数值数组的元胞数组
生成一个 4×3×2 的数值数组,然后创建一个包含 4×1 列向量的 1×3×2 的元胞数组。
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=4×3 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=1×3 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=4×1 cell array
{1x3x2 double}
{1x3x2 double}
{1x3x2 double}
{1x3x2 double}