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的1×1矩阵,并将其分配给第一个单元数组元素。这里的过程类似于我上面描述的用于创建1×4矩阵的过程,除了分配的内存大到足以容纳一个双(8字节)。对于剩余的3个语句中的每个语句重复此操作。因此,在最低限度,第二个示例使用16 8 x 4 = 48字节。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值