从单元阵列中提取数据并包括用于识别的单元索引

时间:2015-02-24 10:39:14

标签: arrays matlab

我有一个69x1单元格数组。每行包含3列double,但行数可变。

例如,每行都有;

4x3双倍 13x3双倍 ......等等。

我使用;

将单元格数组中的所有数据提取到一个矩阵中
result = vertcat(data{:})

我想要做的是根据数据单元阵列中从哪个单元格中提取出一个标识。例如,从数据单元阵列中的第一行提取的4行将在它们前面有1个...所以我会得到类似的东西;

1,x,y,z
1,x,y,z
1,x,y,z
1,x,y,z (as row 1 in data has 4 rows)
2,x,y,z
2,x,y,z (for the 13 rows)

1 个答案:

答案 0 :(得分:2)

这是一种方式:

data = { rand(2,3);
         rand(5,3) }

%// create identity vector
out1 = cell2mat(arrayfun(@(x) x.*ones(1,size(data{x},1)), 1:numel(data),'uni',0)).' %'
%// convert data from cell to double matrix
out2 = cell2mat(data)

%// concatenate output
out = [ out1 , out2 ]

或直接

out = cell2mat([arrayfun(@(x)x.*ones(1,size(data{x},1)).',1:numel(data),'uni',0).',data])

或更多花哨,成本更低(未经测试):

%// create identity vector
A(cumsum([1; cellfun(@(x) size(x,1),data)])) = 1

%// concatenate output
out = [cumsum(A(1:end-1)).' cell2mat(data)]

给出:

data = 
    [2x3 double]
    [5x3 double]


out =
            1      0.88441     0.018613      0.43851
            1      0.72086      0.67478      0.43782
            2      0.11704      0.37569      0.51537
            2      0.81468      0.54655      0.65753
            2      0.32486      0.56192      0.95092
            2      0.24623      0.39582      0.72235
            2      0.34271      0.39813      0.40008