如何在MATLAB中将单元阵列中不同长度的矢量组合成矩阵

时间:2011-06-02 04:45:09

标签: matlab matrix cell-array

如何有效地将不同长度的细胞阵列向量组合到一个矩阵中,用0s或NaNs将向量填充到最大长度?这对cell2mat()来说是个不错的选择。

例如,如果我有

C = {1:3; 1:5; 1:4};

我想得到

M = [1 2 3 0 0
     1 2 3 4 5
     1 2 3 4 0];

M = [1 2 3 NaN NaN
     1 2 3 4 5
     1 2 3 4 NaN];

1 个答案:

答案 0 :(得分:3)

编辑:

对于向量的单元格,如您所示,这将使用零填充向量以形成矩阵

out=cell2mat(cellfun(@(x)cat(2,x,zeros(1,maxLength-length(x))),C,'UniformOutput',false))

out =

     1     2     3     0     0
     1     2     3     4     5
     1     2     3     4     0

今天早些时候曾问similar question,虽然问题的措辞略有不同,my answer基本上可以满足您的需求。

在此处复制相关部分,不均匀向量的单元格可以零填充到矩阵中:

out=cell2mat(cellfun(@(x)cat(1,x,zeros(maxLength-length(x),1)),C,'UniformOutput',false));

假设maxLength已知。在您的情况下,您有行向量,这只是稍作修改。

如果maxLength未知,您可以将其作为

maxLength=max(cellfun(@(x)numel(x),C));