关于matlab:元胞数组语法

Cell Array Syntax

两个问题:

1) 我发现了一段代码,上面写着 cellArr{x}{y}{3,8} = 1.0;,我想知道 {3,8} 是什么意思。该程序将连接图集合中的各个节点连接在一起。这里我们会说"在图 x 的集合中,图 y 从 3 到 8 的连接的顶点标签为 1.0"。不过,总的来说,MatLab 中的语法 {3,8} 是什么意思?

2) 这可能不是这个问题的地方,但如果我知道我总是会有顶点值,即小数/浮点数,我真的应该使用元胞数组吗?矩阵会更好吗,因为我知道我只会有一个数据类型?

谢谢你:)。


  • 元胞数组可以有多个维度,因此它们可以像任何其他多维数组一样使用多个下标进行索引。语法 {3,8} 正在索引一个(大概)二维单元格数组,获取第三行第八列单元格的内容。

  • 使用元胞数组有两个主要原因:存储不同类型的数据或存储不同大小的数据。假设 xy 在您的示例中是标量索引,则 cellArr 是一个单元格数组,其中由 x 索引的单元格包含另一个单元格数组,其由 y 索引的单元格包含一个二维单元格数组它存储您的顶点标签。

    现在,如果您的顶点标签都是相同的数据类型并且都是单个非空(即不是 [])值,那么最低级别的 2-D 元胞数组可以变成 2- D 数值数组,您的索引将如下所示:

    1
    cellArr{x}{y}(3,8) = 1.0;  %# Note the use of () instead of {}

    现在的问题变成了如何处理由 xy 索引的两组封闭元胞数组。如果每个可以被 y 索引的单元格都包含大小和类型都相同的 2-D 数值数组,那么该单元格数组可以转换为可以像这样索引的 3-D 数值数组:

    1
    cellArr{x}(3,8,y) = 1.0;  %# Here I've chosen to use y as the third dimension

    最后,如果每个可以被 x 索引的单元格都包含同样大小和类型相同的 3-D 数值数组,那么 cellArr 可以被转换成一个 4-D 数值数组,像这样索引:

    1
    numArr(3,8,y,x) = 1.0;

    您可以根据自己的喜好更改下标的顺序(即 numArr 的尺寸),但我将 xy 放在最后,这样如果您要索引顶点标签的子数组,例如numArr(:,:,y,x) 它将以二维数组的形式返回。如果您对索引进行了排序,这样您就可以索引一个顶点标签的子数组,如 numArr(x,y,:,:),它会将结果作为一个 4-D 数组返回,其中包含两个前导单例维度的数组(您必须使用类似的函数删除它们挤压)。


  • 语法 {3,8} 是元胞数组索引,就像 {x}{y} 一样。所以 cellArr 是细胞向量的细胞向量。这些单元向量之一由 {x} 索引。该单元向量本身是由 {y} 索引的单元二维矩阵的向量。最后,这个单元矩阵由 {3,8} 索引,即第 3 行和第 8 列。
  • 如果您的所有数据都是数字,那么您最好使用 4 维数组。对于您的示例,此数组将由 numericArray[x, y, 3, 8] 索引。