考虑我有一个大小为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肯定会抛出错误。有没有办法让我可以在矩阵中拥有所有这些向量,而无需事先确定矩阵的大小。
答案 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
- 循环可以替换......)。