Как объединить векторы, образующие матрицу и заполненные нулями - PullRequest
0 голосов
/ 27 февраля 2019

Я хотел бы объединить 2 или более векторов разной длины в матрице и заполнить оставшиеся позиции нулями.

Например, предположим, у меня есть вектор из 3 элементов и еще один из 4Я хотел бы создать (2x4) матрицу, которая содержит второй вышеупомянутый вектор и первый с нулем в конце.

Я пробовал использовать это:

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 голосов
/ 27 февраля 2019
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))]]
0 голосов
/ 28 февраля 2019

Хотя я думаю, что это типичная 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
0 голосов
/ 27 февраля 2019
M = zeros(2,max(length(v1),length(v2)));
M(1,1:length(v1)) = v1;
M(2,1:length(v2)) = v2;
...