【发布时间】:2018-04-13 23:00:29
【问题描述】:
几十年来,我一直在断断续续地使用 Matlab。我认为我对数组、结构、元胞数组、表、结构数组以及每个字段都是数组的结构有很好的把握。对于后两者,我假设每个字段都需要是统一类型。我发现不存在这样的限制:
也许多年来 Matlab 变得更加灵活(我使用的是 2015b),但如果我发现对每种类型的局限性的理解是错误的,它确实会削弱我为任务选择最佳变量类型的信心。出于这个问题的目的,我无法真正阐明任务的需求,因为我将大型待办事项分解为任务的方式取决于我对我可以使用的数据类型的理解,以及它们的优势/局限性.
我可以(并且已经)阅读了令人作呕的在线文档,虽然他们会引导您通过代码来说明数据类型能够做什么,但我还没有遇到关于单元格之间比较限制的简洁描述数组、结构数组以及其字段本身就是数组的结构——以至于我可以使用这些知识在给定情况下选择最佳结构。基本的东西,我确实发现,例如,相同的字段名称将出现在结构数组的每个结构中(但如上面的示例所示,每个结构的每个字段都可以包含高度异构的数据类型和/或数组大小)。
问题
谁能指出元胞数组、结构数组和其字段本身是数组的标量结构之间的限制比较?我正在寻找一种水平的处理方法,可以让编码人员在 (i) 速度、(ii) 内存和 (iii) 可读性、可维护性和可演化性之间做出最佳权衡。
我故意省略了表格,因为尽管我很喜欢它们方便地访问数据集和对数据集(及其呈现方式)进行子集化,但事实证明它们在处理数据方面相当缓慢。它们有它们的用途,我使用它们很随意,但出于比较的目的,我对它们不感兴趣,这是引擎盖下的算法编码。
【问题讨论】:
-
你能缩小你的问题范围吗?是的,
struct数组的不同元素的相同字段不必属于同一类型。在cell和array之间,主要是方便访问。两者都不喜欢(或需要)array附带的那种优化。dict有利于方便地访问键值对。请注意struct的字段的相等性是通过引用。我还没有对cell进行调查,但我会假设相同。 -
至于
table,我不确定它是否与array一样优化矩阵操作。我无权访问它。但我在文档中看到table允许您有更多选项输出到文件并与其他实用程序交互。 -
“对于后两者,我假设每个字段都必须是统一类型。我发现不存在这样的限制。”这种限制从未存在过。
-
@Argyll:
dict是 Octave 的东西吗? MATLAB 没有,至少在核心语言中没有。它可能是其中一个工具箱中的自定义类。 MATLAB 确实有containers.Map,这是一个哈希表。 ||另外,“struct的字段的相等性是通过引用”是什么意思? -
@Argyll:感谢您提示澄清问题。我做了相应的修改。当您说结构之间的相等是通过引用时,我不确定您的意思(我熟悉引用与值的概念)。我承认,这些数据类型都不像基本数据类型的原始数组那样精简。关于 dict,我使用 document.map 作为哈希表。