如何有效地将不同长度的细胞阵列向量组合到一个矩阵中,用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];
答案 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));