Matlab中单元格和矩阵有什么区别?

时间:2012-10-21 18:41:18

标签: matlab matrix

Matlab中的单元格(即{ })和矩阵(即[ ])之间有什么区别?

1 个答案:

答案 0 :(得分:32)

MATLAB中的单元格数组和矩阵之间存在一些差异:

  • 单元格数组可以在每个单元格中包含任意类型的元素;而矩阵要求其元素的类型是同质的,即相同类型。

  • 就内存布局而言,矩阵的所有元素都在内存中连续布局,而单元格数组则包含指向数组中每个元素的指针。在考虑高性能代码的缓存局部性等问题时,这一点非常重要。

  • 第2点的另一面是当你调整矩阵大小时,必须将矩阵中的每个元素复制到新分配的内存区域,但是在单元格数组的情况下,只需要复制一个指针列表过度。根据您要存储的元素的大小和类型,这可能意味着单元格数组的调整速度要快得多。


为了说明内存布局的差异,让我们考虑一个简单的例子:

A = [10 20 30 40];

这里MATLAB创建一个名为A的新矩阵变量,分配足够的内存来容纳4个双精度数(32个字节,假设8个字节为双精度),并将此内存分配给指向真实部分的指针。答:(如果你创建一个复数矩阵,也会为虚构部分分配内存,并且一个单独的指针指向这个内存区域。)

现在让我们创建一个包含这些元素的单元格数组:

B = cell(1, 4);
B{1,1} = 10;
B{1,2} = 20;
B{1,3} = 30;
B{1,4} = 40;

当MATLAB执行第一个语句时,它会创建一个包含4个指针的单元格数组,每个指针都指向一个任意类型。所以B已经使用了16个字节(假设是32位指针)。 下一行创建一个包含值10的1x1矩阵,并将其分配给第一个单元数组元素。这里的过程类似于我上面描述的用于创建1x4矩阵的过程,除了分配的内存大到足以容纳一个双(8字节)。对于剩余的3个陈述中的每一个都重复这一过程。因此,在最低限度,第二个示例使用16 + 8 x 4 = 48个字节。

请注意,MATLAB中的每个变量还包含一个名为 mxArray 的结构的内存开销,该结构存储维度,数据类型等信息以及有关该变量的更多信息。为简单起见,我忽略了这个开销。