【问题标题】:Convert a cell array of vectors to a 2D matrix - MATLAB将向量元胞数组转换为二维矩阵 - MATLAB
【发布时间】:2016-11-23 18:29:39
【问题描述】:

我有一个单元格:

A = {[1, 2]; ...
     [3, 4, 5]; ...
     [6, 7]};

我想把细胞元素放在一个矩阵中形成:

B = [1, 2, 0; ...
     3, 4, 5; ...
     6, 7, 0];

我怎样才能做到这一点?有或没有循环。

【问题讨论】:

  • A 的元素是否总是向量?

标签: matlab matrix cell


【解决方案1】:

这是使用bsxfun's 屏蔽功能的一种方法 -

function out = cell1D_to_mat2D(A)

lens = cellfun('length',A);
out = zeros(max(lens),numel(lens));
mask = bsxfun(@le,[1:max(lens)]',lens(:)');
out(mask) = [A{:}];
out = out.';

示例运行 -

>> A={[1,2];[3,4,5];[6,7];[5,9,5,8,7]};
>> cell1D_to_mat2D(A)
ans =
     1     2     0     0     0
     3     4     5     0     0
     6     7     0     0     0
     5     9     5     8     7

【讨论】:

    【解决方案2】:

    您可以对所有数组进行零填充,使它们的长度相等,然后将它们堆叠以创建一个矩阵:

    maxLen = max(cellfun('length', A));
    B=cell2mat([cellfun(@(x) [x, zeros(1,maxLen-numel(x))], A,'uni',0)]);
    

    【讨论】: