我正在尝试将一个单元格数组分配给另一个单元格数组的子集,例如
data_date1 = '08/15/2003';
data_date2 = '08/16/2003';
data_date3 = '08/17/2003';
num1 = 56;
num2 = 23;
num3 = 2;
cell_1={data_date1, num1; data_date2, num2};
array=cell(3,1)
array{1:2} = cell_1 % problem line
array{3} = {data_date3, num3}
对于上下文,cell_1
数组是另一个函数的输出,我试图在另一个函数的循环中填充array
。
适当的方法是什么?
答案 0 :(得分:4)
要将单元格数组元素从一个单元格数组复制到另一个单元格而不必访问该元素的内容,您可以使用标准矩阵索引语法,该语法使用括号(i,j)
而不是花括号{{1} }。
让{i,j}
成为一个单元格数组:
M
返回1x1 M(i,j)
cell
元素(i,j)
的副本
M
返回 M{i,j}
(i,j)th
元素的内容。这可以是任何类型,具体取决于细胞含量。
因此,在您的情况下,您可以将子数组分配给更大的数组,但您只需要观察索引(所有维度的大小都应该正确)。
因此,如果您声明一个3x2单元数组:
M
如果地址正确,则可以为其分配2x2子阵列:
array=cell(3,2)
然后添加你的最后一个元素:
>> 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
数组)必须知道里面包含的数据类型。
Cell数组具有嵌套的容量。因此,单元阵列的单个单元可以包含另一个完整的单元阵列(其中每个单元可以包含单元阵列等等......虽然我不建议嵌套太深)。
在此配置中,最终数组可以按照您的定义,即3x1单元阵列,其中每个单元格将包含另一个1x2单元阵列。您还可以将子阵列分配给此类型,但源和目标的大小必须匹配。因此,如果您更喜欢此表单,则必须稍微区别地定义uint8
:
cell_1
请注意将单元格数组嵌套到较大的单元格数组中,以便拥有1x2子数组,现在可以将其分配给主数组:
>> cell_1= { {data_date1, num1} ; { data_date2, num2} }
cell_1 =
{1x2 cell}
{1x2 cell}
现在添加最后一个元素,你有两种不同的方法,但你需要小心:
>> array=cell(3,1) ;
array(1:2) = cell_1
array =
{1x2 cell}
{1x2 cell}
[]
这两行是等价的,它们产生相同的结果。你可以做任何一种,或者,根据你喜欢的风格(或者可能是你的数据进入的形状强迫)。
答案 1 :(得分:0)
有错误是因为你不能像这样使用像单元格一样的索引。要么你必须这样做:
array{1} = cell_1;
array{2} = cell_1;
array{3} = {data_date3, num3};
或者您可以尝试repmat
(无需初始化array = cell(3,1)
),但我不知道您的array
有多长时间:
array = repmat({cell_1}, 2, 1);
% or: array = {cell_1; cell_1}
array{3} = {data_date3, num3};
如果array
很短,另一种方式:
array = {cell_1; cell_1; {data_date3, num3}};