单元格阵列语法

时间:2011-02-24 17:59:04

标签: matlab

两个问题:

1)我发现了一段代码类似于cellArr{x}{y}{3,8} = 1.0;的代码,我想知道{3,8}的意思。该程序将连接图的集合中的各个节点连接在一起。这里我们要说“在图形集x中,图形y从3到8的连接的顶点标签为1.0”。一般来说,语法{3,8}在MatLab中的含义是什么?

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

谢谢你:)。

2 个答案:

答案 0 :(得分:4)

  1. 语法{3,8}是单元数组索引,就像{x}{y}一样。因此cellArr是细胞载体的细胞载体。其中一个细胞载体由{x}索引。该细胞载体本身是细胞2d-矩阵的载体,其由{y}索引。最后,该单元矩阵由{3,8}索引,即第3行和第8列。
  2. 如果您的所有数据都是数字,那么使用4维数组会更好。对于您的示例,此数组将由numericArray[x, y, 3, 8]索引。

答案 1 :(得分:4)

  1. Cell arrays可以有多个维度,因此它们可以是indexed,其中包含多个下标multidimensional array。语法{3,8}索引(可能)2-D单元格数组,获取第3行和第8列中单元格的内容。

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

    现在,如果你的顶点标签都是相同的数据类型都只是单个非空(即不是y)值,那么最低级别的二维单元阵列可以转换为二维数字阵列,索引将如下所示:

    []

    现在的问题是如何处理由cellArr{x}{y}(3,8) = 1.0; %# Note the use of () instead of {} x索引的两个封闭的单元格数组。如果可以由y索引的每个单元格都包含所有相同大小和类型的二维数字数组,那么该单元格数组可以转换为一个三维数字数组,可以像这样编入索引:

    y

    最后,如果cellArr{x}(3,8,y) = 1.0; %# Here I've chosen to use y as the third dimension 可以索引的每个单元格都包含再次所有相同大小和类型的三维数字数组,那么x可能是变成了一个4-D数字数组,可以这样编入索引:

    cellArr

    您可以根据自己的喜好更改下标的顺序(即numArr(3,8,y,x) = 1.0; 的尺寸),但我会将numArrx放在最后,这样如果您要编制索引像y这样的顶点标签的子阵列,它会将其作为二维数组返回。如果您对索引进行了排序,以便将顶点标签的子阵列(如numArr(:,:,y,x))编入索引,则会将结果返回为4-D数组,其中包含两个前导单例维度(您必须使用这些维度删除)像SQUEEZE)这样的函数。