繁体   English   中英

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

[英]What is the difference between cell and matrix in Matlab?

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

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

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

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

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


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

A = [10 20 30 40];

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

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

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的结构的内存开销,该结构存储诸如维度,数据类型等信息以及关于该变量的更多信息。 为简单起见,我忽略了这个开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM