介绍性示例(另请参阅元胞数组的基本用法)演示了如何创建包含当前可用变量的元胞数组。然而,在许多情况下,创建一个元胞数组,然后用数据填充它是很有用的。
cell 函数返回给定大小的元胞数组,其中包含空矩阵。此函数类似于用于创建新数字数组的 zeros 函数。以下示例创建一个包含空矩阵的 2×2 元胞数组
c = cell (2,2)
⇒ c =
{
[1,1] = [](0x0)
[2,1] = [](0x0)
[1,2] = [](0x0)
[2,2] = [](0x0)
}
就像数字数组一样,元胞数组也可以是多维的。cell 函数接受任意数量的正整数来描述返回的元胞数组的大小。也可以通过正整数的向量来设置元胞数组的大小。在以下示例中,将创建两个大小相等的元胞数组,并显示第一个的大小
c1 = cell (3, 4, 5);
c2 = cell ( [3, 4, 5] );
size (c1)
⇒ ans =
3 4 5
可以看出 size 函数也适用于元胞数组。其他描述对象大小的函数也是如此,例如 length、numel、rows 和 columns。
C = cell (n) ¶C = cell (m, n) ¶C = cell (m, n, k, …) ¶C = cell ([m n …]) ¶创建一个新的元胞数组对象。
如果使用单个标量整数参数调用,则返回一个 N×N 的方阵元胞数组。如果使用两个或多个标量整数参数或一个整数值向量调用,则返回一个具有给定维度的数组。
另请参阅: cellstr, mat2cell, num2cell, struct2cell.
作为创建空元胞数组然后填充它们的替代方案,可以使用 num2cell、mat2cell 和 cellslices 函数。
C = num2cell (A) ¶C = num2cell (A, dim) ¶将数字矩阵 A 转换为元胞数组。
当没有指定 dim 时,A 的每个元素成为输出 C 中的 1×1 元素。
如果定义了 dim,则 C 的各个元素包含 A 中沿着指定维度的所有元素。dim 也可以是维度的向量,并应用相同的规则。
例如
x = [1,2;3,4]
⇒
1 2
3 4
## each element of A becomes a 1x1 element of C
num2cell (x)
⇒
{
[1,1] = 1
[2,1] = 3
[1,2] = 2
[2,2] = 4
}
## all rows (dim 1) of A appear in each element of C
num2cell (x, 1)
⇒
{
[1,1] =
1
3
[1,2] =
2
4
}
## all columns (dim 2) of A appear in each element of C
num2cell (x, 2)
⇒
{
[1,1] =
1 2
[2,1] =
3 4
}
## all rows and cols appear in each element of C
## (hence, only 1 output)
num2cell (x, [1, 2])
⇒
{
[1,1] =
1 2
3 4
}
另请参阅: mat2cell.
C = mat2cell (A, dim1, dim2, …, dimi, …, dimn) ¶C = mat2cell (A, rowdim) ¶将矩阵 A 转换为元胞数组 C。
每个维度参数(dim1、dim2 等)是一个整数向量,它指定如何将该维度的元素划分到输出 C 的新元素中。第 i 个维度的元素数量是 size (A, i)。由于 A 中的所有元素必须被划分,因此要求 sum (dimi) == size (A, i)。输出元胞数组 C 的大小是 numel(dim1) × numel(dim2) × … × numel(dimn)。
给定一个单一维度参数 rowdim,输出按指定划分为行。所有其他维度不作划分,因此所有列(dim 2)、页(dim 3)等都出现在每个输出元素中。
示例
x = reshape (1:12, [3, 4])'
⇒
1 2 3
4 5 6
7 8 9
10 11 12
## The 4 rows (dim1) are divided in to two cell elements
## with 2 rows each.
## The 3 cols (dim2) are divided in to three cell elements
## with 1 col each.
mat2cell (x, [2,2], [1,1,1])
⇒
{
[1,1] =
1
4
[2,1] =
7
10
[1,2] =
2
5
[2,2] =
8
11
[1,3] =
3
6
[2,3] =
9
12
}
## The 4 rows (dim1) are divided in to two cell elements
## with a 3/1 split.
## All columns appear in each output element.
mat2cell (x, [3,1])
⇒
{
[1,1] =
1 2 3
4 5 6
7 8 9
[2,1] =
10 11 12
}
sl = cellslices (x, lb, ub, dim) ¶给定一个数组 x,此函数从索引向量确定的数组中生成切片的元胞数组。lb 和 ub 分别用于下限和上限。
换句话说,它等效于以下代码:
n = length (lb);
sl = cell (1, n);
for i = 1:length (lb)
sl{i} = x(:,...,lb(i):ub(i),...,:);
endfor
索引的位置由 dim 决定。如果未指定,则沿第一个非奇异维度进行切片。
另请参阅: cell2mat, cellindexmat, cellfun.
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4