代码之家  ›  专栏  ›  技术社区  ›  user3376766

我正在寻找一种将两个数组的元素相加的方法

  •  -4
  • user3376766  · 技术社区  · 11 年前

    我正在寻找一种方法,可以将数组中的元素相加,使得第一个数组的第一个元素添加到第二个数组的每个元素,然后将第一个数组中的第二个元素添加至第二个阵列中的所有元素,依此类推。最后的向量将是length(a)*length(b)long

    例如

    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]

    3 回复  |  直到 11 年前
        1
  •  5
  •   Luis Mendo    11 年前

    阅读 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)));
    
        2
  •  3
  •   Andy Campbell    11 年前

    我的第一个想法是使用一个匿名函数对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
    
        3
  •  1
  •   Rick    11 年前

    使用meshbrid创建a和b的矩阵,并使用矩阵加法计算a+b

    a=[1,2,3,4], b=[5,6,7]
    
    [A_matrix,B_matrix] = meshgrid(a,b)
    result = A_matrix + B_matrix
    
    result = result(:)'