2013-03-20 2 views
1

Можно ли автоматически добавлять векторы, которые не имеют одинаковой длины вместе для матрицы?Matlab: Добавить векторы, не имеющие одинаковой длины, в матрицу

т.е:

a = [1 2 3 4] 
b = [1 2] 

Как я могу сделать C, чтобы быть:

c = [1 2 3 4 ; 1 2 0 0] 

или

c = [1 2 3 4 ; 1 2 NaN NaN] 

или что-то подобное

Благодаря

ответ

1

Сделать функцию как этот

function out = cat2(a, b) 

    diff = length(a) - length(b) 
    if diff > 0 
     b = [b, nan(1, diff)]; 
    else 
     a = [a, nan(1, -diff)]; 
    end 

    out = [a;b]; 

end 

(но и добавить проверку для обработки векторов столбцов тоже)

cat2([1 2 3 4], [1 2]) 

ans = 

    1  2  3  4 
    1  2 NaN NaN 
3

Это может помочь

a = [1 2 3 4]; 
b = [1 2]; 
c = a; 
c(2,1:length(b)) = b; 

c = 

1  2  3  4 
1  2  0  0 

затем, если вы хотите скорее, NaN, чем 0, вы можете сделать то, что предлагает Деннис Джахердин в комментарии ниже.

+0

+1, но также 'c (2,1: length (b)) = b;' сделать его «автоматическим». – Dan

+0

Хорошая точка Дэн, я обновлю свой ответ, чтобы включить (т. Е. Украсть) твою идею. –

+2

Решение NaN также заменит нули в исходных векторах, что, вероятно, нежелательно. Я бы предложил 'c (2, length (b) +1: end) = NaN' –

Смежные вопросы