我成功地进行了10倍交叉验证,并将数据存储在一个单元数组中,我的单元数组结构如下:
[135x5 double] [15x5 double][135x5 double] [15x5 double][135x5 double] [15x5 double][135x5 double] [15x5 double][135x5 double] [15x5 double][135x5 double] [15x5 double][135x5 double] [15x5 double][135x5 double] [15x5 double][135x5 double] [15x5 double]
这是单元数组中数据的一个小示例,假设我们将这个单元数组赋值给变量cell
,这里是cell{1,1}
– 这实际上是Iris数据
5.1000 3.3000 1.7000 0.5000 1.00006.8000 3.2000 5.9000 2.3000 3.00005.0000 2.3000 3.3000 1.0000 2.00007.4000 2.8000 6.1000 1.9000 3.00006.5000 3.2000 5.1000 2.0000 3.00004.8000 3.4000 1.9000 0.2000 1.0000cell{1,2}7.2000 3.2000 6.0000 1.8000 3.00006.1000 2.6000 5.6000 1.4000 3.00006.4000 2.9000 4.3000 1.3000 2.00006.8000 3.0000 5.5000 2.1000 3.00006.1000 2.8000 4.0000 1.3000 2.0000
现在我想遍历每一行并分析第一列中的数据,如Cell{1,1},Cell{1,2}… 该如何做呢?遍历单元数组的技术是什么?
回答:
这个简化的示例能解决你的问题吗?
Z = cell(2, 2);Z{1, 1} = rand(8, 5); Z{1, 2} = rand(2, 5); Z{2, 1} = rand(8, 5); Z{2, 2} = rand(2, 5);X = cell2mat(Z(:, 1));XFirstCol = X(:, 1);
我使用cell2mat
将单元数组第一列中的所有矩阵连接成一个大矩阵,然后最后一行只是提取该矩阵的第一列。
如果你问的是如何遍历单元数组,方法与遍历数值数组相同,但使用大括号来索引单元数组的元素,例如:
for i = 1:2 CurrentCell = Z{i, 1}; FirstColumnOfCurrentCell = CurrentCell(:, 1);end
或者你可以将这两行合并为:FirstColumnOfCurrentCell = Z{i, 1}(:, 1);
最后一点,不要使用cell
作为变量名。这不是好做法,因为cell
也是Matlab内置函数的名称