矩阵中不同大小的行 - matlab

时间:2015-07-03 07:39:59

标签: matlab matrix

考虑我有一个大小为a的向量5x1,并在此向量的开头填充零。使用randn函数生成零个数。由于randn,向量在for循环中由随机数的零填充。我想将这些不同大小的矢量存储在一个矩阵中,我无法想办法如何做到这一点(除了手工固定矩阵的大小。这是一个相同的MWE:

a = rand(5,1)
for ii = 1 : 6
delay = round(abs(randn(1,1)));
shifted_a = [zeros(delay,1);a];
temp_mat(:,ii) = shifted_a    
end

在第二次迭代中,由于temp_mat(:,ii) = shifted_a处的赋值不匹配,matlab肯定会抛出错误。有没有办法让我可以在矩阵中拥有所有这些向量,而无需事先确定矩阵的大小。

2 个答案:

答案 0 :(得分:2)

改为使用cell array

a = rand(5,1);
for ii = 1 : 6
   delay = round(abs(randn(1,1)));
   shifted_a = [zeros(delay,1);a];
   temp_mat{ii} = shifted_a;  % // Use a cell array instead
end

如果您想加入它们,可以使用vertcat制作一个长矢量。

B=vertcat(temp_mat{:});

答案 1 :(得分:1)

根据@kkuillas答案完成问题:

您可以通过

找出列的最大长度
max_len = max(cell2mat(cellfun(@(x)size(x,1),temp_mat,'UniformOutput',false)));

然后创建最终矩阵

fin_mat = zeros(max_len,size(temp_mat,2));

for i = 1:length(temp_mat)
    fin_mat(1:size(temp_mat{i},1),i) = temp_mat{i};
end

(也许for - 循环可以替换......)。