在Matlab中将所有单元格数组合成一个用于crossval的单元格

时间:2014-05-25 11:32:12

标签: arrays matlab struct cell cells

我在 Matlab 中工作,我使用单元格数组来处理不同类型的数据,但是我想在操作结束时将所有单元格数组合成一个,或者可能是一些其他可以避免使用多个单元格阵列的方法(可能是struct可以做到这一点,但我不知道如何)。

我的代码:

 for ii = 1:10
    pp{ii,1}=ii;
    for jj = 1:6
        p1{jj} = jj;
        pp1{jj} = p1{jj}+1;
        p2{jj} =jj^2;
        pp2{jj} = p2{jj}+1;
        p3{jj} = jj^3;
        pp3{jj} = p3{jj}+1;

    end
    p{ii,1} = ([pp(ii,:),pp1,pp2,pp3])';
    p{ii,2} = (['T' num2str(ii)]);    
end

实际输出:

p = 

    {19x1 cell}    'T1' 
    {19x1 cell}    'T2' 
    {19x1 cell}    'T3' 
    {19x1 cell}    'T4' 
    {19x1 cell}    'T5' 
    {19x1 cell}    'T6' 
    {19x1 cell}    'T7' 
    {19x1 cell}    'T8' 
    {19x1 cell}    'T9' 
    {19x1 cell}    'T10'

期望的输出: 在单元格中的每个p{1,1} p{1,2}合并,即它{19x2 cell},最后,所有单元格数组合并为一个单元格数组。

P.S:有什么建议让我的方法有效率,因为我要花费一些时间来进行操作。

编辑1:

我想将data及其label输入到crossval这就是我要做的事情。 另外,当我拥有training

命令时,如何将其与testcrossval('mcr', data, label, 'predfun', @trainingANDtesting, 'kfold', length(label))数据分开

1 个答案:

答案 0 :(得分:0)

你的权利,这看起来像结构的工作。试试这个:

for ii = 1:10
    pp{ii,1}=ii;
    for jj = 1:6
        p1{jj} = jj;
        pp1{jj} = p1{jj}+1;
        p2{jj} =jj^2;
        pp2{jj} = p2{jj}+1;
        p3{jj} = jj^3;
        pp3{jj} = p3{jj}+1;

    end
    p(ii).data = ([pp(ii,:),pp1,pp2,pp3])';
    p(ii).label = (['T' num2str(ii)]);
end

现在,您的单元格的两列都可以通过一个数字来寻址:索引。要访问数据,请执行以下操作:

myData = p(5).data
myLabel = p(5).label

我希望这就是你要找的东西。如果没有,请告诉我,我会再试一次。

编辑1:好的,这个怎么样:

p{ii,1} = [([pp(ii,:),pp1,pp2,pp3])'; (['T' num2str(ii)])]

或者,或者:

data = ([pp(ii,:),pp1,pp2,pp3])';
label = (['T' num2str(ii)]);
p{ii} = [data; label]