使用MATLAB将矩阵向量集成到单元阵列中?

时间:2016-03-30 19:47:02

标签: arrays matlab matrix

我有这个矩阵的单元格数组:

df <- data.frame(col1=rep(letters[1:4], each=3),
                 col2=rep(letters[1:2], each=6),
                 col3=rep(letters[1:3], each=4))

ddf[, sapply(df, function(x) min(nlevels(x)) > 2)]

不幸的是,我不想要那样。我需要的是获得矩阵中的所有向量并获得一个大的向量单元数组。

我怎样才能做到这一点?

我需要一个大小为16 + 17 + 27 + 62 + 16的数组,其中每个向量都有14个元素。

之前我还没有使用过matlab,我相信这有点微不足道。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以在每个单元格数组上调用num2cell,然后使用cat将它们连接起来。

%// Generate some test data
a = arrayfun(@(x)rand(14, x), [16 17 27 62 16] , 'uni', 0);

    [14x16 double]  [14x17 double]  [14x27 double]  [14x62 double]  [14x16 double]

%// Now merge them into a cell array of vectors
newcell = cellfun(@(x)num2cell(x, 1), a, 'uni', 0);
newcell = cat(2, newcell{:});

只是为了验证一切都是我们期望的维度

isequal(size(newcell), [1 16+17+27+62+16])

    1

isequal(size(newcell{1}), [14 1])

    1

如果只是想要一个大矩阵,你可以将初始数据连接成一个矩阵(沿着第二个维度):

matrix = cat(2, a{:});

size(matrix)

    14   138

我建议采用矩阵方法而不是单元阵列方法,因为MATLAB经过高度优化,可以对矩阵执行操作。你肯定会使用单元格阵列来打击性能。