matlab:结构数组的字段实际上是命名单元数组吗?

Posted

技术标签:

【中文标题】matlab:结构数组的字段实际上是命名单元数组吗?【英文标题】:matlab: Is a field of structure array actually a named cell array? 【发布时间】:2014-03-08 11:47:35 【问题描述】:

我在 Google 上搜索了有关元胞数组和数组之间差异的主题,并认为元胞数组实际上存储了指向元素内容的指针。

运算符 就像C 中的&,对吧?

应用于变量var_a,var_b 时,我们会得到一个指向var_avar_b 的1*2“单元指针”数组? “单元格指针”有名称吗?

结构体数组是否采用类似的内存排列方式?

以matlab文档中的例子为例:

patient.name = 'John Doe';
patient.billing = 127.00;
patient.test = [79, 75, 73; 180, 178, 177.5; 172, 170, 169];

patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68, 70, 68; 118, 118, 119; 172, 170, 169];

所以变量患者就像一个 2*3 单元格数组,除了字段名称?

patientcell2,3=...

我想知道下面的概念:

结构中的点运算符尊重其内容:

patient(1).test;

=> 患者细胞1,3

对吗?

【问题讨论】:

为了更深入地了解,我建议深入研究 MEX API 以了解 how the underlying mxArray works 在幕后 - 即使是数字数组实际上也只存储指向其数据的指针(这就是复制的方式-write 机制有效,一方面) 我认为为了完成写时复制,数值数组只存储指向起始元素的指针,这与元胞数组不同。您帖子中的链接是一个api列表,没有详细的实现。很遗憾,mathworks 隐藏了这些细节。 【参考方案1】:

Preallocation of cell array in matlab

可以合理地假设一个元胞数组被实现为 连续的指针数组,每个指针指向的实际内容 细胞。

How do i define a structure in Matlab

结构只是一个指针[s]数组

【讨论】:

感谢您确认我对结构包含两个指针的犹豫。也许将二维元胞数组类比为结构数组本身就是一个模棱两可的问题。毕竟,我们没有下面的实现,Mathworks 也没有把这两者的语义等价。

以上是关于matlab:结构数组的字段实际上是命名单元数组吗?的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB中单元数组能转换成矩阵吗

结构型变量与单元数组的异同?(matlab的简答题)

matlab怎样输出结构体数组

使用字符串数组的值来命名变量(Matlab)

在matlab中对单元格数组进行分类

Matlab:为结构数组相同位置的(不同)字段分配相同的值