如何连接形成矩阵并填充零的向量

时间:2019-02-26 21:03:35

标签: matlab octave

我想在一个矩阵中连接2个或多个不同长度的向量,并用零填充其余位置。

例如,假设我有一个包含3个元素的向量,另一个是4个。我想创建一个(2x4)矩阵,其中包含上述第二个向量,第一个向量的末尾为零。 / p>

我尝试使用此功能:

v1 = [1 2 3];
v2 = [1 2 3 4];
M(1,:) = v1; M(2,:) = v2;
%and also cat(1,v1,v2) and cat(3,v1,v2)

但是没有用。我还必须考虑到我不知道第二个向量的元素数量(矩阵将在for循环中形成,将每个向量添加到矩阵的一行中。)

我希望有人能帮助我。谢谢您的回复。

3 个答案:

答案 0 :(得分:1)

M = zeros(2,max(length(v1),length(v2)));
M(1,1:length(v1)) = v1;
M(2,1:length(v2)) = v2;

答案 1 :(得分:0)

v1 = [1 2 3];
v2 = [1 2 3 4 5 6 7];
mxl=max(numel(v1),numel(v2))
m=[[v1 zeros(1,mxl-numel(v1))]; [v2 zeros(1,mxl-numel(v2))]]

答案 2 :(得分:0)

尽管我认为这是一个典型的xy问题,但对于多个向量来说,这是更通用的解决方案:

v{1} = [1 2 3];
v{2} = [10 20 30 40];
v{3} = [8 9];
ml = max (cellfun ("numel", v));
M = cat (1, cellfun (@(c) postpad (c, ml, 0), v, "UniformOutput", false){:})
M =
    1    2    3    0
   10   20   30   40
    8    9    0    0