要将元胞数组元素从一个元胞数组复制到另一个元胞数组,而无需访问元素的内容,您可以使用标准矩阵索引语法,该语法使用方括号 (i,j) 而不是花括号 {i,j}。
让M 成为一个元胞数组:
M(i,j) 返回一个 1x1 cell,M 的 (i,j) 元素的副本
M{i,j} 返回M 的(i,j)th 元素的内容。这可以是任何类型,具体取决于单元格内容。
元胞数组作为标准数组
因此,在您的情况下,您可以将子数组分配给更大的数组,但您只需要注意索引(所有维度的大小都应该正确)。
因此,如果您声明一个 3x2 单元数组:
array=cell(3,2)
如果地址正确,您可以将 2x2 子数组分配给它:
>> array(1:2,:) = cell_1
array =
'08/15/2003' [56]
'08/16/2003' [23]
[] []
然后添加你最后的元素:
>> array(3,:) = {data_date3, num3}
array =
'08/15/2003' [56]
'08/16/2003' [23]
'08/17/2003' [ 2]
这种方式将您的数组视为nxm 标准数组,只需将cell 类型视为特定类型(就像您将拥有double 或uint8 数组一样)而不必知道数据的类型它们包含在里面。
嵌套元胞数组
元胞数组具有这种嵌套能力。所以一个单元格数组的一个单元格可以包含另一个完整的单元格数组(每个单元格可以包含单元格数组等......虽然我不建议嵌套太深)。
在此配置中,您的最终数组可以是您定义的 3x1 元胞数组,其中每个元胞将包含另一个 1x2 元胞数组。您也可以将子数组分配给这种类型,但源和目标的大小必须匹配。因此,如果您更喜欢这种形式,则必须稍微不同地定义您的 cell_1:
>> cell_1= { {data_date1, num1} ; { data_date2, num2} }
cell_1 =
{1x2 cell}
{1x2 cell}
注意将元胞数组嵌套到更大的元胞数组中,以便拥有一个 1x2 子数组,您现在可以将其分配给主数组:
>> array=cell(3,1) ;
array(1:2) = cell_1
array =
{1x2 cell}
{1x2 cell}
[]
现在添加最后一个元素有两种不同的方法,但需要小心:
array(3) = { {data_date3, num3} } %// assign a 1x2 sub array to the 3rd element of "array"
array{3} = {data_date3, num3} %// set the content of the 3rd element of "array" as a 1x2 cell array
这两行是等价的,它们产生相同的结果。您可以根据自己喜欢的样式来选择或执行(或者可能会受到数据进入的形状的影响)。