gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:28 25 4
gpt4 key购买 nike

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

最佳答案

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

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

  • 就内存布局而言,矩阵的所有元素都在内存中连续布局,而元胞数组包含指向数组每个元素的指针。在考虑高性能代码的缓存位置等问题时,这可能很重要。

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


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

A = [10 20 30 40];

此处 MATLAB 创建了一个名为 A 的新矩阵变量,分配了足够的内存来容纳 4 个 double (32 字节,假设为 8 个字节的 double )并将此内存分配给指向 实数 部分的指针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 矩阵的过程,除了分配的内存大到足以容纳一个 double (8 字节)。对其余 3 个语句中的每一个重复此操作。因此,至少,第二个示例使用 16 + 8 x 4 = 48 字节。

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

关于matlab - Matlab中的单元格和矩阵有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13000923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com