2014-03-03 3 views
-4

Я ищу способ, которым я могу добавить элементы в массив, чтобы первый элемент первого массива добавлялся к каждому элементу во втором массиве, тогда второй элемент в первом массиве добавляется ко всем элементам второго массива и так далее. Окончательный вектор будет длиной (а) * длина (б) в длинуЯ ищу способ добавить элементы из двух массивов

, например ...

a=[1,2,3,4] b=[5,6,7] answer = [(1+5),(1+6),(1+7),(2+5),(2+6),(2+7),(3+5),(3+6),(3+7),(4+5),(4+6),(4+7)] =[6,7,8,7,8,9,8,9,10,9,10,11]

+2

Вы пробовали? возможно, цикл 'for'? домашнее задание? – sebas

ответ

3

Моей первой мысли, чтобы сделать это с помощью arrayfun анонимной функции, которая добавляет каждый скаляр элемент из a в полный массив в b. Тогда, так как вы получите массив ячеек результата вы можете расширить этот массив ячеек в массив, который вы ищете:

>> a=[1,2,3,4], b=[5,6,7] 
>> result = arrayfun(@(x) x+b, a,'UniformOutput',false); 
>> result = [result{:}] 

result = 

    6  7  8  7  8  9  8  9 10  9 10 11 
+0

@ user3376766, это, безусловно, правильное решение, но не используйте привычку 'arrayfun'. Для скорости см. 'Bsxfun'. – chappjc

5

Читайте на bsxfun. Это очень полезно для такого рода вещей (и, как правило, быстрее, чем arrayfun или for петель):

result = bsxfun(@plus, a(:).', b(:)); %'// matrix of size numel(b) x numel(a) 
result = result(:).'; %'// linearize to a vector 

Или чуть больше урод: kron делает то, что вы хотите с продуктами вместо сумм. Итак:

result = log(kron(exp(a),exp(b))); 
1

Использование meshgrid для создания матриц а и б и использование сложения матриц для вычисления а + б

a=[1,2,3,4], b=[5,6,7] 

[A_matrix,B_matrix] = meshgrid(a,b) 
result = A_matrix + B_matrix 

result = result(:)'