【问题标题】:Im looking for a way to add up elements of two arrays我正在寻找一种将两个数组的元素相加的方法
【发布时间】:2014-04-05 04:58:36
【问题描述】:

我正在寻找一种可以将数组中的元素相加的方法,以便将第一个数组的第一个元素添加到第二个数组中的每个元素,然后将第一个数组中的第二个元素添加到所有每个元素第二个数组中的元素,依此类推。最终向量将是 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]

【问题讨论】:

  • 你试过了吗?也许是for 循环?家庭作业?

标签: arrays matlab addition


【解决方案1】:

使用meshgrid创建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(:)'

【讨论】:

    【解决方案2】:

    阅读bsxfun。它对这类事情非常有用(通常比arrayfunfor 循环更快):

    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)));
    

    【讨论】:

      【解决方案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
      

      【讨论】:

      • @user3376766,这当然是一个正确的解决方案,但不要养成使用arrayfun的习惯。有关速度,请参阅bsxfun
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 2020-09-25
      • 2016-08-13
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多