如何在MATLAB中将不同长度的向量组合成矩阵放入单元数组中

4

如何高效地将不同长度的单元数组向量组合成矩阵,并用0或NaN填充向量到最大长度?这将是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
重复的问题:如何在MATLAB中将不同长度的单元格累积成矩阵?(https://dev59.com/L3A75IYBdhLWcg3w4tR7) - gnovice
是的!谢谢。不幸的是,我没能找到它。 - yuk
1个回答

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

今天早些时候,有人提出了一个类似的问题,虽然问题的措辞略有不同,但我的答案基本上可以满足你的要求。
将不均匀向量的单元格填充为矩阵可以进行零填充,如下所示:
out=cell2mat(cellfun(@(x)cat(1,x,zeros(maxLength-length(x),1)),C,'UniformOutput',false));

假设已知 maxLength。在您的情况下,您有行向量,这只是对此的轻微修改。

如果未知 maxLength,可以通过以下方式获得:

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

谢谢,@yoda。你几乎完成了与之前问题相比较的单行代码。不幸的是,第一行不起作用。我会将maxLength查找器更改为更简单的:maxLength = max(cellfun(@numel,x)); 我会进一步研究它。 - yuk
@yuk:为什么它不起作用?正如我所提到的,我是针对“列”向量编写的,而你在这里使用的是“行”向量...如果你进行更改,它应该可以工作。我将在几分钟内编辑我的问题以添加进去。 - user616736

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接