【问题标题】:How can I need multiply group of elements instead of one element in matrices multiplication如何在矩阵乘法中需要乘以一组元素而不是一个元素
【发布时间】:2019-02-27 09:49:13
【问题描述】:

假设我有一个维度为 [4x4] 的矩阵和一个 [16x1] 的向量,我需要将向量中的每 4 个元素乘以矩阵中的一个元素,(而不是逐行乘以向量中的元素),如何使用循环来做到这一点?

例如下面,结果向量中前四个元素的结果如下例所示,那么矩阵中的第二、第三和第四行也是如此。 :

所以该示例中的结果应该是 [16x1]

谢谢

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:

    使用kron,您可以使用这个单行:

    %A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
    %v = [2 2 2 2 0 0 0 0 1 1 1 1 3 3 3 3].';
    sum(kron(A,ones(4,4)).'.*v).'/4
    

    我使用克罗内克张量积来“复制” 4x4 时间的 A 矩阵。之后就是纯代数了。

    【讨论】:

    • 这个排序不错!不错。
    【解决方案2】:

    这只是变相的矩阵乘法...如果您的 tall 向量是与所示矩阵大小相同的矩阵,其中每个突出显示的块都是一行,则它是矩阵乘法。我们可以设置它,然后重新整形为向量。

    您可以使用索引将其转换为简单的矩阵乘法。我今天已经answered 提出了一个问题,详细说明了使用bsxfun 进行以下索引的工作原理,然后我们只是在最后reshape

    % Setup
    A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
    v = [2 2 2 2 0 0 0 0 1 1 1 1 3 3 3 3].';
    
    % Matrix mutliplication
    r = numel(v)/size(A,1);
    b = A * v( bsxfun( @plus, (1:r:numel(v)).', 0:r-1 ) );
    % Make result a column vector
    b = reshape( b.', [], 1 );
    

    【讨论】:

      【解决方案3】:

      看看这是不是你想要的:

      A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
      v = [2 2 2 2 0 0 0 0 1 1 1 1 3 3 3 3].';
      r = reshape(sum(bsxfun(@times, permute(A, [3 2 1]), permute(reshape(v, 1, [], size(A,2)), [2 3 1])), 2), [], 1);
      

      给了

      r =
          17
          17
          17
          17
          41
          41
          41
          41
          65
          65
          65
          65
          89
          89
          89
          89
      

      【讨论】:

      • 我想到了这个,然后说“嗯,我就循环”:P
      • 非常感谢,效果也很好。但我无权投票,也无权接受多个答案:)
      【解决方案4】:

      我假设了一些细节,但这应该可以解决问题:

      A=reshape(1:16,4,4).';
      b=repelem([2,0,1,3],1,4).';
      
      c=[];
      for row=1:size(A,1)
           c=[ c; sum(reshape(repelem(A(row,:),4).*b.',4,[]),2)];
      end
      

      我在这里假设您的向量演示只是一个不好的示例,并且您不会有重复的值,否则可以通过不进行 3/4 的乘法来实现更简单的版本。


      如果您无法访问repelem,请查看执行相同操作的替代代码:Element-wise array replication in Matlab

      【讨论】:

      • 非常感谢您的快速回答,您能否解释一下您所说的 repelem 是什么意思?当我在 MATLAB 中为它输入帮助时,我不明白。你在重复 2、0、1 和 3 的元素吗?但是它们是随机生成的呢?
      • 如何使用命令 repmat(A,4,4) ,其中 A 是矩阵 [4x4]?但在那种情况下,整个矩阵将被重复,有没有可以替代 repmat 的命令,我可以逐个元素地重复??
      • @Gze 请阅读链接的问题。你的问题有7个答案,我这里不用解释了
      • 非常感谢,效果也很好。但我无权投票,也无权接受多个答案:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2019-03-31
      • 2016-06-04
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多